利用 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 網頁中的事件偵聽程式
。
|
|
|