使 ActionScript 对象可用于 JavaScriptAdobe AIR 1.0 和更高版本 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 页面中的事件侦听器。 |
|