Mise des objets ActionScript à disposition de JavaScript

Adobe AIR 1.0 et les versions ultérieures

Le JavaScript dans la page HTML chargée par un objet HTMLLoader peut appeler les classes, les objets et les fonctions définis dans le contexte d’exécution d’ActionScript à l’aide des propriétés window.runtime , window.htmlLoader et window.nativeWindow de la page HTML. Par la création de références aux objets et fonctions ActionScript au sein d’un contexte d’exécution de JavaScript, vous pouvez également mettre ceux-ci à la disposition du code JavaScript.

Exemple de base pour l’accès à des objets JavaScript à partir d’ActionScript

L’exemple ci-dessous décrit comment ajouter des propriétés qui font référence à des objets dans l’objet window global d’une page HTML.

var html:HTMLLoader = new HTMLLoader(); 
var foo:String = "Hello from container SWF."  
function helloFromJS(message:String):void { 
    trace("JavaScript says:", message); 
} 
var urlReq:URLRequest = new URLRequest("test.html"); 
html.addEventListener(Event.COMPLETE, loaded); 
html.load(urlReq); 
 
function loaded(e:Event):void{ 
    html.window.foo = foo; 
    html.window.helloFromJS = helloFromJS; 
}

Le contenu HTML, qui se trouve dans un fichier appelé test.html, chargé dans un objet HTMLLoader de l’exemple précédent, peut accéder à la propriété foo et à la méthode helloFromJS() définies dans le fichier SWF parent :

<html> 
    <script> 
        function alertFoo() { 
            alert(foo);  
        } 
    </script> 
    <body> 
        <button onClick="alertFoo()"> 
            What is foo? 
        </button> 
        <p><button onClick="helloFromJS('Hi.')"> 
            Call helloFromJS() function. 
        </button></p> 
    </body> 
</html>

Lorsque vous accédez au contexte JavaScript d’un document en cours de chargement, vous pouvez utiliser l’événement htmlDOMInitialize pour créer des objets suffisamment tôt dans la séquence de création de la page pour que des scripts définis dans la page puissent y accéder. Si vous attendez l’événement complete , seuls les scripts de la page qui s’exécutent après l’événement load de la page peuvent accéder aux objets ajoutés.

Mise des définitions de classe à disposition de JavaScript

Pour mettre les classes ActionScript de votre application à la disposition de JavaScript, vous pouvez affecter le contenu HTML chargé au domaine de l’application qui contient les définition de classes. Le domaine d’application du contexte d’exécution de JavaScript peut être défini avec la propriété runtimeApplicationDomain de l’objet HTMLLoader. Pour définir le domaine d’application sur le domaine d’application principal, par exemple, définissez runtimeApplicationDomain sur ApplicationDomain.currentDomain , comme le montre le code ci-dessous :

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

Dès que la propriété runtimeApplicationDomain est définie, le contexte JavaScript partage les définitions de classe avec le domaine affecté. Pour créer une occurrence d’une classe personnalisée dans JavaScript, faites référence à la définition de classe par la propriété window.runtime et utilisez l’opérateur new .

var customClassObject = new window.runtime.CustomClass();

Le contenu HTML doit provenir d’un domaine de sécurité compatible. S’il provient d’un domaine de sécurité autre que celui de l’application auquel vous l’affectez, la page utilise plutôt un domaine d’application par défaut. Par exemple, si vous chargez à partir d’Internet une page distante, vous ne pourriez pas affecter ApplicationDomain.currentDomain comme domaine d’application de la page.

Suppression des écouteurs d’événement

Lorsque vous ajoutez des écouteurs d’événement à des objets hors de la page en cours, y compris des objets d’exécution, des objets dans du contenu SWF chargé et même des objets JavaScript qui s’exécutent dans d’autres pages, vous devriez toujours supprimer les écouteurs d’événement lorsque la page décharge. Autrement, l’écouteur d’événement distribue l’événement à une fonction de gestionnaire qui n’existe plus. Si cela se produit, le message d’erreur suivant s’affiche : « The application attempted to reference a JavaScript object in an HTML page that is no longer loaded » (L’application a tenté de référencer un objet JavaScript sur une page HTML qui n’est plus chargée). La suppression d’écouteurs d’événement qui ne sont plus utiles permet aussi à AIR de récupérer la mémoire qui leur est associée. Pour plus d’informations, voir la section Suppression d’écouteurs d’événement sur une page HTML de navigation .