讓 JavaScript 可以使用 ActionScript 物件

Adobe AIR 1.0 以及更新的版本

利用 HTMLLoader 物件所載入之 HTML 網頁的 window.runtimewindow.htmlLoaderwindow.nativeWindow 屬性,此 HTML 網頁中的 JavaScript 便可以呼叫 ActionScript 執行內容中定義的類別、物件和函數。您也可以在 JavaScript 執行內容中建立 ActionScript 物件和函數的參考,讓 JavaScript 程式碼可以使用這些物件和函數。

基本範例:透過 ActionScript 存取 JavaScript 物件

在下列範例中,會示範如何將參考 ActionScript 物件的屬性加入至 HTML 網頁的全域 window 物件:

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

在上一個範例中,HTMLLoader 物件中載入的 HTML 內容 (在名為 test.html 的檔案內) 可以存取父輩 SWF 檔中定義的 foo 屬性和 helloFromJS() 方法:

<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 可以使用類別定義

若要能在 JavaScript 中使用應用程式的 ActionScript 類別,您可以將載入的 HTML 內容指定給包含這些類別定義的應用程式網域。JavaScript 執行內容的應用程式網域可以透過 HTMLLoader 物件的 runtimeApplicationDomain 屬性來設定。例如,若要將應用程式網域設定為主要應用程式網域,請將 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 物件) 時,一定要在取消載入網頁時移除這些事件偵聽程式。否則,這些事件偵聽程式就會將事件傳送至已不存在的處理常式函數。發生這個情況時,您將看到下列錯誤訊息:「應用程式嘗試參考已不存在之 HTML 網頁中的 JavaScript 物件」。移除不再需要的事件偵聽程式時,也會讓 AIR 將相關的記憶體回收。如需詳細資訊,請參閱移除瀏覽之 HTML 網頁中的事件偵聽程式