您可以在 AIR 應用程式的 HTML 內容中嵌入 SWF 內容,就像在瀏覽器的 HTML 內容中嵌入 SWF 內容一樣。使用
object
標籤、
embed
標籤或兩者,即可嵌入 SWF 內容。
備註:
常見的網頁開發作法,是同時使用
object
和
embed
標籤,在 HTML 網頁中顯示 SWF 內容。這種作法在 AIR 中並沒有優點,您可以只在內容中使用符合 W3C 標準的
object
標籤本身,在 AIR 中顯示內容。同時,對於也會在瀏覽器中顯示的 HTML 內容,您也可以繼續使用
object
和
embed
標籤兩者。
如果您已在顯示 HTML 和 SWF 內容的 NativeWindow 物件中啟用透明度,則當用來嵌入內容的視窗模式 (
wmode
) 值設定為:
window
時,AIR 不會顯示 SWF 內容。 若要在透明視窗的 HTML 頁面中顯示 SWF 內容,請將
wmode
參數設定為
opaque
或
transparent
。
window
是
wmode
的預設值,因此如果您沒有指定值,則內容可能無法顯示。
在下列範例中,會示範如何使用 HTML
object
標籤,在 HTML 內容中顯示 SWF 檔。
wmode
參數已設定為
opaque
,即使基礎 NativeWindow 物件為透明,還是可以顯示內容。此 SWF 檔是從應用程式目錄載入,但是您可以使用 AIR 支援的任何 URL 配置 (SWF 檔的載入來源位置會決定 AIR 要在哪個安全執行程序中放置內容)。
<object type="application/x-shockwave-flash" width="100%" height="100%">
<param name="movie" value="app:/SWFFile.swf"></param>
<param name="wmode" value="opaque"></param>
</object>
您也可以使用 Scrip 動態載入內容。下列範例會建立
object
節點,以顯示
urlString
參數中指定的 SWF 檔。在範例中,會加入該節點做為網頁元素的子系,而這個網頁元素的 ID 是由
elementID
參數指定:
<script>
function showSWF(urlString, elementID){
var displayContainer = document.getElementById(elementID);
var flash = createSWFObject(urlString, 'opaque', 650, 650);
displayContainer.appendChild(flash);
}
function createSWFObject(urlString, wmodeString, width, height){
var SWFObject = document.createElement("object");
SWFObject.setAttribute("type","application/x-shockwave-flash");
SWFObject.setAttribute("width","100%");
SWFObject.setAttribute("height","100%");
var movieParam = document.createElement("param");
movieParam.setAttribute("name","movie");
movieParam.setAttribute("value",urlString);
SWFObject.appendChild(movieParam);
var wmodeParam = document.createElement("param");
wmodeParam.setAttribute("name","wmode");
wmodeParam.setAttribute("value",wmodeString);
SWFObject.appendChild(wmodeParam);
return SWFObject;
}
</script>
縮放或旋轉 HTMLLoader 物件,或將
alpha
屬性值設為 1.0 以外的值,都無法顯示 SWF 內容。在 AIR 1.5.2 之前的版本中,無論
wmode
的值設定為何,都無法在透明視窗中顯示 SWF 內容。
備註:
當內嵌的 SWF 物件嘗試載入如視訊檔的外部資源時,如果 HTML 檔沒有提供視訊檔的絕對路徑,則可能無法適當顯示 SWF 內容。但是,內嵌的 SWF 物件可使用相對路徑載入外部影像檔。
以下範例說明外部資源如何透過內嵌於 HTML 內容的 SWF 物件載入外部資源:
var imageLoader;
function showSWF(urlString, elementID){
var displayContainer = document.getElementById(elementID);
imageLoader = createSWFObject(urlString,650,650);
displayContainer.appendChild(imageLoader);
}
function createSWFObject(urlString, width, height){
var SWFObject = document.createElement("object");
SWFObject.setAttribute("type","application/x-shockwave-flash");
SWFObject.setAttribute("width","100%");
SWFObject.setAttribute("height","100%");
var movieParam = document.createElement("param");
movieParam.setAttribute("name","movie");
movieParam.setAttribute("value",urlString);
SWFObject.appendChild(movieParam);
var flashVars = document.createElement("param");
flashVars.setAttribute("name","FlashVars");
//Load the asset inside the SWF content.
flashVars.setAttribute("value","imgPath=air.jpg");
SWFObject.appendChild(flashVars);
return SWFObject;
}
function loadImage()
{
showSWF("ImageLoader.swf", "imageSpot");
}
在以下 ActionScript 範例中,會讀取 HTML 檔傳送的影像路徑並在舞台上載入影像:
package
{
import flash.display.Sprite;
import flash.display.LoaderInfo;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.Loader;
import flash.net.URLRequest;
public class ImageLoader extends Sprite
{
public function ImageLoader()
{
var flashvars = LoaderInfo(this.loaderInfo).parameters;
if(flashvars.imgPath){
var imageLoader = new Loader();
var image = new URLRequest(flashvars.imgPath);
imageLoader.load(image);
addChild(imageLoader);
imageLoader.x = 0;
imageLoader.y = 0;
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;
}
}
}
}