Il codice JavaScript di una pagina HTML caricato da un oggetto HTMLLoader può chiamare classi, oggetti e funzioni, definiti nel contesto di esecuzione di ActionScript, usando le proprietà
window.runtime
,
window.htmlLoader
e
window.nativeWindow
della pagina HTML. Potete anche rendere disponibili gli oggetti e le funzioni di ActionScript per il codice di JavaScript creando riferimenti ad essi nel contesto di esecuzione di JavaScript.
Un semplice esempio di accesso agli oggetti JavaScript da ActionScript
Nel seguente esempio viene illustrato come aggiungere proprietà che si riferiscono agli oggetti ActionScript all'oggetto window globale di una pagina 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;
}
Il contenuto HTML (nel file test.html) caricato nell'oggetto HTMLLoader dell'esempio precedente può accedere alla proprietà
foo
e al metodo
helloFromJS()
definiti nel file SWF principale:
<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>
Quando accedete al contesto JavaScript di un documento che si sta caricando, potete usare l'evento
htmlDOMInitialize
per creare gli oggetti in una fase iniziale della sequenza di creazione della pagina, così da consentire a qualunque script definito nella pagina di accedervi. Se attendete il
completamento
dell'evento, solo gli script nella pagina che vengono eseguiti dopo l'evento
load
possono accedere agli oggetti aggiunti.
Uso delle definizioni delle classi in JavaScript
Per fare in modo che le classi ActionScript della vostra applicazione siano disponibili in JavaScript, potete assegnare il contenuto HTML caricato al dominio dell'applicazione che contiene le definizioni delle classi. Il dominio dell'applicazione del contesto di esecuzione di JavaScript può essere impostato con la proprietà
runtimeApplicationDomain
dell'oggetto HTMLLoader. Per impostare il dominio dell'applicazione sul dominio dell'applicazione principale, ad esempio, impostate
runtimeApplicationDomain
su
ApplicationDomain.currentDomain
, come mostrato nel seguente codice:
html.runtimeApplicationDomain = ApplicationDomain.currentDomain;
Dopo che la proprietà
runtimeApplicationDomain
è impostata, il contesto JavaScript condivide le definizioni delle classi con il dominio assegnato. Per creare un'istanza di una classe personalizzata in JavaScript, richiamate la definizione della classe tramite la proprietà
window.runtime
e usate l'operatore
new
:
var customClassObject = new window.runtime.CustomClass();
Il contenuto HTML deve provenire da un dominio di sicurezza compatibile. Se il contenuto HTML proviene da un dominio di sicurezza diverso dal dominio dell'applicazione assegnato, la pagina userà un dominio dell'applicazione predefinito al suo posto. Ad esempio, se caricaste una pagina remota da Internet, non potreste assegnare ApplicationDomain.currentDomain come dominio dell'applicazione per la pagina.
Eliminazione dei listener di eventi
Quando aggiungete i listener di eventi JavaScript a oggetti esterni alla pagina corrente, inclusi gli oggetti di runtime, gli oggetti nel contenuto SWF caricato e anche gli oggetti JavaScript in esecuzione in altre pagine, dovete sempre rimuovere quei listerner di eventi quando la pagina viene chiusa. In caso contrario, il listener di eventi invia l'evento a una funzione del gestore che non esiste più. Se ciò accade, viene visualizzato il seguente messaggio d'errore: “The application attempted to reference a JavaScript object in an HTML page that is no longer loaded. (L'applicazione ha tentato di fare riferimento a un oggetto JavaScript in una pagina che non è più caricata)”. La rimozione dei listerner di eventi non più necessari permette ad AIR di riappropriarsi della memoria associata. Per ulteriori informazioni, consultate
Rimozione di listener di eventi in pagine HTML visualizzate
.
|
|
|