HTMLLoader 对象加载的 HTML 页中的 JavaScript,可以使用 HTML 页的
window.runtime
、
window.htmlLoader
和
window.nativeWindow
属性来调用 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
若要使应用程序的 ActionScript 类可用于 JavaScript,可以将加载的 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 内容来自所分配的应用程序域之外的其他安全域,则页面将改为使用默认的应用程序域。例如,如果从 Internet 加载远程页面,则不能将 ApplicationDomain.currentDomain 分配为该页面的应用程序域。
删除事件侦听器
在将 JavaScript 事件侦听器添加到当前页面外部的对象时(包括运行时对象、加载的 SWF 内容中的对象,甚至是其他页面中运行的 JavaScript 对象),则均应在页面卸载时删除这些事件侦听器。否则,事件侦听器会将事件调度给不再存在的处理函数。如果出现这种情况,将会看到以下错误消息:“The application attempted to reference a JavaScript object in an HTML page that is no longer loaded”(应用程序尝试引用已不再加载的 HTML 页中的 JavaScript 对象)。删除不必要的事件侦听器还能使 AIR 回收关联的内存。有关详细信息,请参阅
删除执行导航的 HTML 页面中的事件侦听器
。
|
|
|