在 HTML 中嵌入 SWF 內容

Adobe AIR 1.0 以及更新的版本

您可以在 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; 
                  } 
            } 
      } 
}