Открытие доступа к объектам ActionScript для JavaScript

Adobe AIR 1.0 и более поздних версий

JavaScript на HTML-странице, загружаемой объектом HTMLLoader, может вызывать классы, объекты и функции, определенные контекстом выполнения ActionScript с помощью свойств window.runtime , window.htmlLoader и window.nativeWindow HTML-страницы. Кроме того, объекты и функции ActionScript, могут быть доступны коду JavaScript, если создать на них ссылки к контексте выполнения JavaScript.

Простой пример доступа к объектам JavaScript из ActionScript

В примере ниже показано, как добавлять свойства, указывающие на глобальный объект окна 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; 
}

HTML-содержимое (в файле test.html), загруженное в объект HTMLLoader в предыдущем примере, имеет доступ к свойству foo и методу helloFromJS() , которые определены в родительском 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>

При доступе к контексту JavaScript загружаемого документа можно использовать событие htmlDOMInitialize для создания объектов на раннем этапе построения страницы, чтобы все заданные сценарии могли к ним обратиться. Если дождаться события complete , то только сценарии, запускаемые после события load , будут иметь доступ к добавляемым объектам.

Открытия определениям классов доступа к JavaScript

Чтобы классы ActionScript были доступны для JavaScript, можно назначить загружаемое HTML-содержимое домену приложения, содержащему определения классов. Домен приложения в контексте выполнения JavaScript может быть задан с помощью свойства runtimeApplicationDomain объекта HTMLLoader. Чтобы сделать домен приложения основным, задайте для runtimeApplicationDomain значение ApplicationDomain.currentDomain , как показано ниже:

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

После определения runtimeApplicationDomain контекст JavaScript пользуется определениями классов совместно с назначенным доменом. Для создания экземпляра заказного класса в JavaScript задайте на него ссылку с помощью свойства window.runtime и оператора new :

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

HTML-содержимое должно приходить с домена, подходящего по параметрам безопасности. Если HTML-содержимое приходит с домена, отличающегося от назначенного домена приложения, страница будет использовать домен приложения по умолчанию. Например, при загрузке удаленной страницы из Интернета ApplicationDomain.currentDomain нельзя назначить доменом приложения для страницы.

Удаление прослушивателей событий

Если прослушиватели событий JavaScript добавлены к объектам вне текущей страницы, включая объекты среды выполнения, объекты загруженного SWF-содержимого и даже объекты JavaScript, выполняемые на других страницах, необходимо удалять эти прослушиватели при выгрузке страницы. В противном случае прослушиватель будет отправлять событие функции обработчика, которой более не существует. В этом случае будет выведено следующее сообщение об ошибке: «Приложение попыталось обратиться к объекту JavaScript на HTML-странице, которая уже выгружена». Удаление ненужных прослушивателей также позволяет среде AIR восстановить задействованную память. Дополнительные сведения см. в разделе « Удаление прослушивателей событий на HTML-страницах с навигацией ».