AIR 可以擴充 HTML 指令碼元素,如此網頁即可在已編譯的 SWF 檔中匯入 ActionScript 類別。例如,若要匯入名為「myClasses.swf」的元件庫 (位於根應用程式資料夾的
lib
子目錄中),請在 HTML 檔中納入下列指令碼標籤:
<script src="lib/myClasses.swf" type="application/x-shockwave-flash"></script>
重要事項:
type 特質必須是
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>
標籤匯入至 HTML 網頁的 SWF 檔中,透過 ActionScript 存取網頁內的物件,請將 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
元素的內容,以及設定網頁上 JavaScript 變數
foo
的值。
public function modifyDOM(window:*):void {
window.document.getElementById("p1").innerHTML = "Bye";
window.foo = 66;