在 HTML 页中使用 ActionScript 库

Adobe AIR 1.0 和更高版本

AIR 对 HTML 脚本元素进行了扩展,以便页面可以导入编译的 SWF 文件中的 ActionScript 类。例如,若要导入名为 myClasses.swf 的库(位于应用程序根文件夹的 lib 子目录中),则应在 HTML 文件中包含以下 script 标签:

<script src="lib/myClasses.swf" type="application/x-shockwave-flash"></script>
重要说明: 类型属性必须为 type="application/x-shockwave-flash",才能正确加载库。

如果将 SWF 内容编译为 Flash Player 10 或 AIR 1.5 SWF,则必须将应用程序描述符文件的 XML 命名空间设置为 AIR 1.5 命名空间。

在对 AIR 文件进行打包时,也必须包含 lib 目录和 myClasses.swf 文件。

通过 JavaScript Window 对象的 runtime 属性访问导入的类:

var libraryObject = new window.runtime.LibraryClass();

如果 SWF 文件中的类已组织到包中,则同时还必须包含包名称。例如,如果 LibraryClass 定义位于名为 utilities 的包中,则需要使用以下语句来创建该类的实例:

var libraryObject = new window.runtime.utilities.LibraryClass();
注: 若要编译 ActionScript SWF 库使其作为 AIR 中的 HTML 页的一部分,请使用 acompc 编译器。acompc 实用程序是 Flex SDK 的一部分,Flex SDK 文档中对此有相关说明。

从导入的 ActionScript 文件访问 HTML DOM 和 JavaScript 对象

若要在使用 <script> 标签导入页面的 SWF 文件中从 ActionScript 访问 HTML 页中的对象,需将对 JavaScript 对象的引用(例如 windowdocument)传递给 ActionScript 代码中定义的函数。在函数中使用引用来访问 JavaScript 对象(或通过传入的引用可访问的其他对象)。

例如,请看以下 HTML 页:

<html> 
    <script src="ASLibrary.swf" type="application/x-shockwave-flash"></script> 
    <script> 
        num = 254; 
        function getStatus() { 
            return "OK."; 
        } 
        function runASFunction(window){ 
            var obj = new runtime.ASClass(); 
            obj.accessDOM(window); 
        } 
    </script> 
    <body onload="runASFunction"> 
        <p id="p1">Body text.</p> 
    </body> 
</html>

这个简单的 HTML 页包含名为 num 的 JavaScript 变量和名为 getStatus() 的 JavaScript 函数。两者均为该页面的全局 window 对象的属性。此外,window.document 对象还包括一个名为 P 的元素(ID 为 p1)。

该页加载了一个 ActionScript 文件“ASLibrary.swf”,其中包含类 ASClass。ASClass 定义了一个名为 accessDOM() 的函数,该函数可以轻松跟踪这些 JavaScript 对象的值。accessDOM() 方法将 JavaScript Window 对象作为一个参数。使用此 Window 引用,可访问页面中的其他对象,包括变量、函数和 DOM 元素,如以下定义所示:

public class ASClass{ 
    public function accessDOM(window:*):void { 
        trace(window.num); // 254 
        trace(window.document.getElementById("p1").innerHTML); // Body text.. 
        trace(window.getStatus()); // OK. 
    } 
}

可以通过导入的 ActionScript 类同时获取和设置 HTML 页的属性。例如,以下函数设置了页面上 p1 元素的内容,并设置了页面上 foo JavaScript 变量的值:

public function modifyDOM(window:*):void { 
    window.document.getElementById("p1").innerHTML = "Bye"; 
    window.foo = 66;