Udostępnianie obiektów ActionScript dla kodu JavaScript

Adobe AIR 1.0 i starsze wersje

Kod JavaScript na stronie HTML załadowanej przez obiekt HTMLLoader może wywoływać klasy, obiekty i funkcje zdefiniowane w kontekście wywołania ActionScript za pomocą właściwości window.runtime , window.htmlLoader i window.nativeWindow strony HTML. Programista może także udostępniać obiekty i funkcje języka ActionScript dla kodu JavaScript, tworząc odwołania do nich w kontekście wywołania JavaScript.

Podstawowy przykład dostępu obiektów JavaScript z kodu ActionScript

Poniższy przykład ilustruje, w jaki sposób dodać właściwości odnoszące się do obiektów ActionScript do globalnego obiektu okna strony 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; 
}

Treść HTML (w pliku o nazwie test.html) załadowana do obiektu HTMLLoader w poprzednim przykładzie może uzyskać dostęp do właściwości foo i metody helloFromJS() zdefiniowanej w nadrzędnym pliku SWF:

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

Podczas dostępu do kontekstu JavaScript ładującego dokumentu można użyć zdarzenia htmlDOMInitialize , aby utworzyć obiekty w sekwencji tworzenia strony, zanim jakikolwiek skrypt zdefiniowany na stronie będzie mógł uzyskać do nich dostęp. Jeśli programista poczeka na zdarzenie complete , tylko skrypty strony, które uruchomione zostaną po zdarzeniu load strony, będą mogły uzyskać dostęp do dodanych obiektów.

Udostępnianie definicji klas dla kodu JavaScript

Aby udostępnić klasy ActionScript aplikacji dla kodu JavaScript, programista może przypisać załadowaną treść HTML do domeny aplikacji zawierającej definicje klas. Domenę aplikacji kontekstu wykonania JavaScript można ustawić za pomocą właściwości runtimeApplicationDomain obiektu HTMLLoader. Na przykład: aby ustawić domenę aplikacji na domenę główną aplikacji, należy ustawić właściwość runtimeApplicationDomain na ApplicationDomain.currentDomain , co ilustruje poniższy kod:

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

Po ustawieniu właściwości runtimeApplicationDomain kontekst JavaScript współużytkuje definicje klas z przypisaną domeną. Aby utworzyć instancję klasy niestandardowej w języku JavaScript, należy odwołać się do definicji klasy za pomocą właściwości window.runtime i użyć operatora new :

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

Treść HTML musi pochodzić ze zgodnej domeny zabezpieczeń. Jeśli treść HTML znajduje się w innej domenie zabezpieczeń niż przypisana domena aplikacji, strona w zamian użyje domyślnej domeny aplikacji. Na przykład: jeśli z Internetu załadowana zostanie zdalna strona, nie będzie możliwe przypisanie ApplicationDomain.currentDomain jako domeny aplikacji dla strony.

Usuwanie detektorów zdarzeń

Jeśli do obiektów spoza bieżącej strony (łącznie z obiektami środowiska wykonawczego, obiektami w załadowanej treści SWF, a nawet obiektami JavaScript działającymi na innych stronach), dodane zostaną detektory zdarzeń JavaScript, należy je zawsze usunąć w czasie wyładowania strony. W przeciwnym wypadku detektor zdarzeń wywoła zdarzenie do funkcji modułu obsługi, która już nie istnieje. Jeśli się tak stanie, wyświetlony następujący komunikat podobny do następującego: „Aplikacja podjęła próbę utworzenia odwołania do obiektu JavaScript na stronie HTML, która nie jest już załadowana”. Usunięcie niepotrzebnych detektorów zdarzeń umożliwia także środowisku AIR odzyskanie powiązanej pamięci. Więcej informacji zawiera sekcja Usuwanie detektorów zdarzeń ze stron HTML, które nawigują .