A propos de la classe HTMLLoader

Adobe AIR 1.0 et les versions ultérieures

La classe HTMLLoader d’Adobe AIR définit l’objet d’affichage qui peut afficher du contenu HTML dans une application AIR. Les applications basées sur SWF peuvent ajouter un contrôle HTMLLoader à une fenêtre existante ou créer une fenêtre HTML qui contienne automatiquement un objet HTMLLoader avec HTMLLoader.createRootWindow() . Il est possible d’accéder à l’objet HTMLLoader via la propriété window.htmlLoader de JavaScript au sein de la page HTML chargée.

Chargement du contenu HTML d’une URL

Le code suivant charge une URL dans un objet HTMLLoader (ajoutez le HTMLLoader en tant qu’enfant de la scène ou tout autre conteneur d’objet d’affichage pour afficher le contenu HTML dans votre application) :

import flash.html.HTMLLoader; 
 
var html:HTMLLoader = new HTMLLoader; 
html.width = 400; 
html.height = 600; 
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); 
html.load(urlReq);

Les propriétés width et height d’un objet HTMLLoader sont toutes deux définies sur 0 par défaut. Vous allez vouloir définir ces dimensions lorsque vous ajouterez un objet HTMLLoader à la scène. Cet objet distribue plusieurs événements à mesure qu’une page se charge. Vous pouvez utiliser ces événements pour déterminer à quel moment on peut interagir sans risque avec la page chargée. Ces événements sont décrits dans la section Gestion des événements HTML dans AIR .

Remarque : dans la structure Flex, seules les classes qui étendent la classe UIComponent peuvent être ajoutées en tant qu’enfants de composants d’un conteneur Flex. C’est pour cette raison que vous ne pouvez pas ajouter directement un HTMLLoader en tant qu’enfant d’un composant de conteneur Flex. Toutefois, vous pouvez utiliser le contrôle mx:HTML de Flex, construire une classe personnalisée qui étend l’UIComponent et contient un HTMLLoader comme enfant d’un UIComponent ou bien ajouter le HTMLLoader en tant qu’enfant d’un UIComponent et ajouter l’UIComponent au conteneur Flex.

Vous pouvez également afficher le texte HTML à l’aide de la classe TextField, mais ses capacités sont limitées. La classe TextField d’Adobe® Flash® Player prend en charge un sous-ensemble du balisage de HTML ; mais, en raison de restrictions de taille, ses capacités sont réduites. La classe HTMLLoader contenue dans Adobe AIR n’est pas disponible dans Flash Player.

Chargement de contenu HTML depuis une chaîne

La méthode loadString() d’un objet HTMLLoader charge une chaîne de contenu HTML dans un objet HTMLLoader :

var html:HTMLLoader = new HTMLLoader(); 
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>"; 
html.loadString(htmlStr);

Par défaut, le contenu chargé via la méthode loadString() est placé dans un sandbox hors de l’application avec les caractéristiques suivantes :

  • Il peut charger le contenu depuis le réseau (mais pas depuis le système de fichiers).

  • Il ne peut pas charger les données avec XMLHttpRequest.

  • La propriété window.location est définie sur "about:blank" .

  • Le contenu ne peut pas accéder à la propriété window.runtime (alors que le contenu placé dans tout sandbox non applicatif le peut).

Dans AIR 1.5, la classe HTMLLoader comprend une propriété placeLoadStringContentInApplicationSandbox . Lorsque cette propriété est définie sur true pour un objet HTMLLoader, le contenu chargé par la méthode loadString() est placé dans le sandbox de l’application. (La valeur par défaut est false .) Le contenu chargé par la méthode loadString() a ainsi accès à la propriété window.runtime et à toutes les API AIR. Si vous définissez cette propriété sur true , assurez-vous que la source des données d’une chaîne utilisée dans un appel à la méthode loadString() soit approuvée. Les instructions du code de la chaîne HTML sont exécutées avec tous les privilèges de l’application lorsque cette propriété est définie sur true . Ne définissez cette propriété sur true que si vous êtes certain(e) que la chaîne ne contient que du code inoffensif.

Dans les applications compilées avec les kits SDK d’AIR 1.0 ou AIR 1.1, le contenu chargé par la méthode loadString() est placé dans le sandbox de l’application.

Règles de sécurité importantes lors de l’utilisation de contenu HTML dans des applications AIR

Les fichiers que vous installez avec l’application AIR ont accès aux interfaces de programmation d’AIR. Pour des raisons de sécurité, ce n’est pas le cas pour du contenu provenant d’autres sources. Par exemple, une telle restriction empêche le contenu provenant d’un domaine distant, comme http://example.com, de lire le contenu du répertoire dans l’ordinateur de bureau de l’utilisateur (ou pire encore).

Comme il est possible d’exploiter des failles de sécurité en appelant la fonction eval() et les interfaces de programmation qui lui sont liées, l’utilisation de ces méthodes est interdite, par défaut, au contenu installé avec l’application. Toutefois, quelques structures Ajax utilisent la fonction eval() et les interfaces de programmation qui lui sont liées.

Pour structurer convenablement le contenu qui va travailler dans une application AIR, il faut tenir compte des règles qui régissent les restrictions liées à la sécurité et qu’il faut appliquer à du contenu provenant de sources différentes. Un tel contenu est placé dans des classifications de sécurité distinctes appelées sandbox de sécurité (voir Sandbox de sécurité ). Par défaut, un contenu installé avec l’application l’est dans un sandbox appelé sandbox de l’application . Il a alors accès aux interfaces de programmation d’AIR. Le sandbox de l’application est en règle générale le sandbox le plus sécurisé, doté de restrictions conçues pour empêcher l’exécution de code non approuvé.

Le moteur d’exécution vous permet de charger le contenu installé avec votre application dans un sandbox autre que celui de l’application. Le contenu dans des sandbox hors application s’exécute dans un environnement similaire à celui d’un navigateur Web classique. Par exemple, le code dans des sandbox hors application peut utiliser eval() et des méthodes apparentées. Par contre, il ne peut pas accéder aux interfaces de programmation d’AIR. Le moteur d’exécution contient des dispositifs pour permettre aux contenus de sandbox différents de communiquer entre eux en toute sécurité, sans exposer les interfaces de programmation d’AIR à un contenu hors application, par exemple. Pour plus d’informations, voir la section Programmation croisée du contenu dans des sandbox de sécurité distincts .

Si vous appelez du code interdit d’exécution dans un sandbox pour des raisons de sécurité, une erreur JavaScript est signalée par le message : « Violation des règles de sécurité d’Adobe AIR par du code JavaScript dans le sandbox de sécurité de l’application ».

Pour éviter cette erreur, suivez les règles de codage présentées dans la section suivante, Contournement des erreurs JavaScript liées à la sécurité .

Pour plus d’informations, voir Sécurité HTML dans Adobe AIR .