使 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 页面中的事件侦听器。 |
|