讓 JavaScript 可以使用 ActionScript 物件Adobe AIR 1.0 以及更新的版本 利用 HTMLLoader 物件所載入之 HTML 網頁的 window.runtime、window.htmlLoader 和 window.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 網頁中的事件偵聽程式。 |
|