將內容加入至 AIR 視窗的方式取決於視窗的類型。例如,MXML 和 HTML 可以讓您以宣告方式來定義視窗的基本內容。您可以將資源嵌入應用程式 SWF 檔中,也可以從不同的應用程式檔案中載入資源。Flex、Flash 和 HTML 內容全都可以透過此方式建立,並以動態方式加入至視窗中。
當您載入 SWF 內容,或載入包含 JavaScript 的 HTML 內容時,必須將 AIR 安全性模型納入考量。應用程式安全執行程序中的任何內容 (也就是,與您的應用程式一起安裝的且可使用 app: URL 配置載入的內容) 都具備可存取所有 AIR API 的完整權限。從這個安全執行程序之外載入的任何內容都不能存取 AIR API。在應用程式安全執行程序之外的 JavaScript 內容不能夠使用 JavaScript Window 物件的
runtime
、
nativeWindow
或
htmlLoader
屬性。
若要允許安全的跨指令碼處理,您可以使用安全執行程序橋接,在應用程式內容與非應用程式內容之間提供有限的介面。在 HTML 內容中,您也可以將應用程式的頁面對應至非應用程式安全執行程序中,以允許頁面上的程式碼對外部內容進行跨指令碼處理。請參閱:
AIR 安全性
。
載入 SWF 檔或影像
您可以使用
flash.display.Loader
類別,將 Flash SWF 檔或影像載入原生視窗的顯示清單之中:
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Loader;
public class LoadedSWF extends Sprite
{
public function LoadedSWF(){
var loader:Loader = new Loader();
loader.load(new URLRequest("visual.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadFlash);
}
private function loadFlash(event:Event):void{
addChild(event.target.loader);
}
}
}
備註:
使用 ActionScript 1 或 2 建立的舊版 SWF 檔案可共享全域狀態,例如類別定義、Singleton,如果這些檔案載入相同視窗,也會共享全域變數。如果這種 SWF 檔案要依賴未修改的全域狀態才能正確運作,它就不能重複載入相同視窗,也不能使用重疊的類別定義和變數,以另一個 SWF 檔的身分載入相同的視窗。此內容可以載入不同的視窗。
將 HTML 內容載入 NativeWindow
若要將 HTML 內容載入 NativeWindow,您可以將 HTMLLoader 物件加入視窗舞台,然後將 HTML 內容載入 HTMLLoader,或使用
HTMLLoader.createRootWindow()
方法建立已包含 HTMLLoader 物件的視窗。下列範例會將 HTML 內容顯示在原生視窗的舞台上,300 x 500 像素的顯示區域之中:
//newWindow is a NativeWindow instance
var htmlView:HTMLLoader = new HTMLLoader();
htmlView.width = 300;
htmlView.height = 500;
//set the stage so display objects are added to the top-left and not scaled
newWindow.stage.align = "TL";
newWindow.stage.scaleMode = "noScale";
newWindow.stage.addChild( htmlView );
//urlString is the URL of the HTML page to load
htmlView.load( new URLRequest(urlString) );
若要將 HTML 頁面載入 Flex 應用程式,您可以使用 Flex HTML 組件。
如果視窗使用透明度 (即視窗的
transparent
屬性為
true
),不會顯示 HTML 檔案中的 SWF 內容,除非用來參考 SWF 檔案之 object 或 embed 標籤的
wmode
參數設定為
opaque
或
transparent
。因為
wmode
預設值為
window
,依照預設,SWF 內容不會顯示在透明視窗中。無論使用哪一個
wmode
值,PDF 內容都不會顯示在透明視窗中。
同時,如果縮放、旋轉 HTMLLoader 控制項,或 HTMLLoader
alpha
屬性設為 1.0 以外的值,SWF 和 PDF 內容都不會顯示。
加入 SWF 內容做為 HTML 視窗上的重疊部分
由於 HTML 視窗包含於 NativeWindow 實體之中,因此您可以將 Flash 顯示物件加入至顯示清單中的 HTML 圖層上方和下方。
若要將顯示物件加入至 HTML 圖層上方,請使用
window.nativeWindow.stage
屬性的
addChild()
方法。
addChild()
方法會將內容加入視窗中任何現有內容的上方圖層中。
若要將顯示物件加入至 HTML 圖層下方,請使用
window.nativeWindow.stage
屬性的
addChildAt()
方法,傳入零值以供
index
參數使用。將物件放在零索引上,會將現有內容 (包括 HTML 顯示) 移至上一層,並將新的內容安插在底部。若要顯示位於 HTML 頁面下方圖層的內容,必須將
HTMLlLoader
物件的
paintsDefaultBackground
屬性設定為
false
。此外,設定背景顏色的任何頁面元素都不會是透明的。例如,如果您為頁面主體元素設定背景顏色,則頁面上任何部分都不會是透明的。
下列範例說明如何將 Flash 顯示物件加入做為 HTML 頁面的上層重疊或下層重疊。此範例會建立兩個形狀簡單的物件,並在 HTML 內容的上方和下方各加入一個物件。此範例也會根據
enterFrame
事件,更新形狀位置。
<html>
<head>
<title>Bouncers</title>
<script src="AIRAliases.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript">
air.Shape = window.runtime.flash.display.Shape;
function Bouncer(radius, color){
this.radius = radius;
this.color = color;
//velocity
this.vX = -1.3;
this.vY = -1;
//Create a Shape object and draw a circle with its graphics property
this.shape = new air.Shape();
this.shape.graphics.lineStyle(1,0);
this.shape.graphics.beginFill(this.color,.9);
this.shape.graphics.drawCircle(0,0,this.radius);
this.shape.graphics.endFill();
//Set the starting position
this.shape.x = 100;
this.shape.y = 100;
//Moves the sprite by adding (vX,vY) to the current position
this.update = function(){
this.shape.x += this.vX;
this.shape.y += this.vY;
//Keep the sprite within the window
if( this.shape.x - this.radius < 0){
this.vX = -this.vX;
}
if( this.shape.y - this.radius < 0){
this.vY = -this.vY;
}
if( this.shape.x + this.radius > window.nativeWindow.stage.stageWidth){
this.vX = -this.vX;
}
if( this.shape.y + this.radius > window.nativeWindow.stage.stageHeight){
this.vY = -this.vY;
}
};
}
function init(){
//turn off the default HTML background
window.htmlLoader.paintsDefaultBackground = false;
var bottom = new Bouncer(60,0xff2233);
var top = new Bouncer(30,0x2441ff);
//listen for the enterFrame event
window.htmlLoader.addEventListener("enterFrame",function(evt){
bottom.update();
top.update();
});
//add the bouncing shapes to the window stage
window.nativeWindow.stage.addChildAt(bottom.shape,0);
window.nativeWindow.stage.addChild(top.shape);
}
</script>
<body onload="init();">
<h1>de Finibus Bonorum et Malorum</h1>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis
et quasi architecto beatae vitae dicta sunt explicabo.</p>
<p style="background-color:#FFFF00; color:#660000;">This paragraph has a background color.</p>
<p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis
praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias
excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui
officia deserunt mollitia animi, id est laborum et dolorum fuga.</p>
</body>
</html>
此範例提供一些進階技巧的基本簡介,這些技巧可在 AIR 中廣泛地應用於 JavaScript 與 ActionScript 上。如果您不熟悉使用 ActionScript 顯示物件,請參閱《ActionScript 3.0 開發人員指南》中的
顯示程式設計
。