Como tornar objetos ActionScript disponíveis para JavaScript

Adobe AIR 1.0 e posterior

O JavaScript na página HTML carregada pelo objeto HTMLLoader pode chamar as classes, os objetos e as funções definidas no contexto de execução do ActionScript, usando as propriedades window.runtime , window.htmlLoader e window.nativeWindow da página HTML. Você também pode tornar objetos e funções ActionScript disponíveis para código JavaScript, criando referências para eles no contexto de execução do JavaScript.

Um exemplo básico de como acessar objetos JavaScript do ActionScript

O seguinte exemplo ilustra como adicionar propriedades que fazem referência a objetos ActionScript ao objeto window global de uma página 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; 
}

O conteúdo HTML (no arquivo chamado test.html), carregado no objeto HTMLLoader no exemplo anterior, pode acessar a propriedade foo e o método helloFromJS() definidos no arquivo SWF pai:

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

Ao acessar o contexto JavaScript de um documento que está sendo carregado, você pode usar o evento htmlDOMInitialize para criar objetos na sequência de construção da página, cedo o bastante para que qualquer script definido na página possa acessá-los. Se você aguardar o evento complete , somente scripts da página executados depois do evento load da página poderão acessar os objetos adicionados.

Como tornar as definições de classe disponíveis para JavaScript

Para disponibilizar as classes ActionScript do aplicativo em JavaScript, você pode atribuir o conteúdo HTML carregado ao domínio de aplicativo que contém as definições de classe. O domínio de aplicativo do contexto de execução do JavaScript pode ser definido com a propriedade runtimeApplicationDomain do objeto HTMLLoader. Para definir o domínio de aplicativo como domínio de aplicativo primário, por exemplo, defina runtimeApplicationDomain como ApplicationDomain.currentDomain , conforme mostra o código a seguir:

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

Depois que a propriedade runtimeApplicationDomain for definida, o contexto JavaScript compartilha as definições de classe com o domínio atribuído. Para criar uma ocorrência de classe personalizada em JavaScript, faça referência à definição de classe por meio da propriedade window.runtime e use o operador novo :

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

O conteúdo HTML deve ser de um domínio de segurança compatível. Se o conteúdo HTML for de um domínio de segurança diferente do domínio de aplicativo que você atribuir, em vez disso a página usará um domínio de aplicativo padrão. Por exemplo, se você carregar uma página remota da Internet, não poderá atribuir ApplicationDomain.currentDomain como domínio de aplicativo da página.

Remoção de ouvintes de eventos

Quando você adiciona ouvintes de eventos JavaScript a objetos fora da página atual, incluindo objetos de tempo de execução, objetos no conteúdo SWF carregado e até objetos JavaScript em execução em outras páginas, deve sempre remover esses ouvintes de eventos quando a página for descarregada. Do contrário, o ouvinte de evento despacha o evento para uma função do manipulador que não existe mais. Se isso acontecer, você verá a seguinte mensagem de erro: "O aplicativo tentou fazer referência a um objeto JavaScript em uma página HTML que não é mais carregada". A remoção de ouvintes de eventos desnecessários também permite que o AIR recupere a memória associada. Para obter mais informações, consulte Remoção de ouvintes de eventos nas páginas HTML que navegam .