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