JavaScript in de HTML-pagina die door een HTMLLoader-object is geladen, kan de klassen, objecten en functies oproepen die in de ActionScript-uitvoeringscontext zijn gedefinieerd. Daartoe wordt gebruikgemaakt van de eigenschappen
window.runtime
,
window.htmlLoader
en
window.nativeWindow
van de HTML-pagina. U kunt ook ActionScript-objecten en -functies beschikbaar maken voor JavaScript-code door verwijzingen naar die objecten en functies op te nemen in de JavaScript-uitvoeringscontext.
Basisvoorbeeld om JavaScript-objecten op te roepen vanuit ActionScript
In het volgende voorbeeld ziet u hoe u eigenschappen kunt toevoegen die ActionScript-objecten verwijzen naar het algemene vensterobject van een HTML-pagina:
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;
}
De HTML-inhoud (in een bestand met de naam test.html), die in het vorige voorbeeld in het HTMLLoader-object is geladen, kan de eigenschap
foo
oproepen, evenals de methode
helloFromJS()
, die in het bovenliggende SWF-bestand is gedefinieerd:
<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>
Als u de JavaScript-context oproept van een document dat op dat moment wordt geladen, kunt u met de gebeurtenis
htmlDOMInitialize
al vroeg in de constructiesequentie van de pagina objecten maken, zodat ze toegankelijk zijn voor scripts die in de pagina zijn gedefinieerd. Als u wacht op de gebeurtenis
complete
, kunnen alleen scripts die na de gebeurtenis
load
van de pagina worden uitgevoerd, toegang krijgen tot de toegevoegde objecten.
Klassedefinities beschikbaar maken voor JavaScript
Als u de ActionScript-klassen van uw toepassing beschikbaar wilt maken in JavaScript, kunt u de geladen HTML-inhoud toewijzen aan het toepassingsdomein waarin zich de klassedefinities bevinden. Het toepassingsdomein van de JavaScript-uitvoeringscontext kan worden ingesteld met de eigenschap
runtimeApplicationDomain
van het HTMLLoader-object. Als u het toepassingsdomein bijvoorbeeld wilt instellen op het primaire toepassingsdomein, stelt u
runtimeApplicationDomain
in op
ApplicationDomain.currentDomain
, zoals in de volgende code:
html.runtimeApplicationDomain = ApplicationDomain.currentDomain;
Nadat de eigenschap
runtimeApplicationDomain
is ingesteld, deelt de JavaScript-context klassedefinities met het toegewezen domein. Als u een instantie van een aangepaste klasse in JavaScript wilt maken, verwijst u naar de klassedefinitie via de eigenschap
window.runtime
en gebruikt u de operator
new
:
var customClassObject = new window.runtime.CustomClass();
De HTML-inhoud moet afkomstig zijn van een compatibel beveiligingsdomein. Als de HTML-inhoud afkomstig is van een ander beveiligingsdomein dan dat van het toepassingsdomein dat u toewijst, gebruikt de pagina in plaats daarvan een standaard toepassingsdomein. Voorbeeld: als u een externe pagina van internet laadt, kunt u ApplicationDomain.currentDomain niet toewijzen als het toepassingsdomein van de pagina.
Gebeurtenislisteners verwijderen
Als u gebeurtenislisteners voor JavaScript toevoegt aan objecten buiten de huidige pagina, inclusief runtimeobjecten, objecten in de geladen SWF-inhoud en zelfs JavaScript-objecten die in andere pagina's worden uitgevoerd, moet u deze gebeurtenislisteners altijd verwijderen als de pagina niet meer is geladen. Anders verzendt de gebeurtenislistener de gebeurtenis naar een handlerfunctie die niet meer bestaat. In dit geval wordt er een foutmelding weergegeven dat de toepassing heeft geprobeerd te verwijzen naar een JavaScript-object in een HTML-pagina die niet meer is geladen. Wanneer u overbodige gebeurtenislisteners verwijdert, kan AIR ook het overeenkomstige geheugen opnieuw gebruiken. Zie
Gebeurtenislisteners verwijderen in HTML-pagina's die navigeren
voor meer informatie.
|
|
|