Uso degli oggetti di ActionScript in JavaScript

Adobe AIR 1.0 e versioni successive

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 .