在 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 对象的引用(例如 window 或 document)传递给 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;