Göra ActionScript-objekt tillgängliga för JavaScript

Adobe AIR 1.0 och senare

JavaScript på en HTML-sida som blir inläst av ett HTMLLoader-objekt kan anropa de klasser, objekt och funktioner som är definierade i ActionScript-körningskontexten med hjälp av egenskaperna window.runtime , window.htmlLoader och window.nativeWindow för HTML-sidan. Du kan också göra ActionScript-objekt och -funktioner tillgängliga för JavaScript-kod genom att skapa referenser till dem i JavaScript-körningskontexten.

Ett enkelt exempel på hur du kan få åtkomst till JavaScript-objekt från ActionScript

Följande exempel visar hur du kan lägga till egenskaper som refererar till ActionScript-objekt i det globala window-objektet för en HTML-sida:

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; 
}

HTML-innehållet (i en fil som heter test.html) som blir inläst i HTMLLoader-objektet i föregående exempel får tillgång till den foo -egenskap och helloFromJS() -metod som är definierad i den överordnade SWF-filen:

<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>

När du får åtkomst till JavaScript-kontexten i ett dokument som blir inläst, kan du använda htmlDOMInitialize -händelsen för att skapa objekt väldigt tidigt i sidkonstruktionen så att de skript som definieras på sidan kan få åtkomst till dem. Om du väntar på complete -händelsen kan bara skripten som körs efter sidans load -händelse få åtkomst till de tillagda objekten.

Göra klassdefinitioner tillgängliga för JavaScript

Om du vill göra ActionScript-klasserna i programmet tillgängliga i JavaScript, kan du tilldela det inlästa HTML-innehållet till den programdomän som innehåller klassdefinitionerna. Programdomänen för JavaScript-körningskontexten kan anges med hjälp av runtimeApplicationDomain -egenskapen för HTMLLoader-objektet. Om du vill ange programdomänen som den primära programdomänen, anger du till exempel runtimeApplicationDomain som ApplicationDomain.currentDomain enligt följande kod:

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

När runtimeApplicationDomain -egenskapen är angiven delar JavaScript-kontexten klassdefinitioner med den tilldelade domänen. Om du vill skapa en instans av en anpassad klass i JavaScript, refererar du klassdefinitionen via window.runtime -egenskapen och använder operatorn new :

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

HTML-innehållet måste vara från en kompatibel säkerhetsdomän. Om HTML-innehållet är från en annan säkerhetsdomän än den som tillhör den tilldelade programdomänen, använder sidan en standardprogramdomän i stället. Om du till exempel läser in en fjärrsida från Internet kan du inte tilldela ApplicationDomain.currentDomain som sidans programdomän.

Ta bort händelseavlyssnare

Om du lägger till JavaScript-händelseavlyssnare till objekt utanför den aktuella sidan, inklusive runtime-objekt, objekt i inläst SWF-innehåll och JavaScript-objekt som körs på andra sidor, måste du alltid ta bort de här händelseavlyssnarna när sidan tas bort. Annars skickar händelseavlyssnaren händelsen till en hanterarfunktion som inte finns längre. Om det här inträffar visas ett felmeddelande av liknande typ: ”Programmet försökte referera till ett JavaScript-objekt på en HTML-sida som inte finns inläst.” Om du tar bort onödiga händelseavlyssnare frigörs det tillhörande minnet och AIR återfår det. Mer information finns i Ta bort händelseavlyssnare på HTML-sidor som innehåller navigering .