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;