輔助功能*

Adobe

 

出版日期:
31 Mar 2006
用户级别:
全部
產品:
Activecontent

因應宣佈的瀏覽器變更為具備動態內容的網站做好準備

相信多數人都已得知 Microsoft 宣佈將對 Internet Explorer 做變更。您可能會想問這對使用內嵌 (「啟動」)內容和應用程式網站有何影響?動態內容包括 Macromedia Flash、Shockwave 或 Adobe Acrobat 檔案。您可能會開始考慮現在應該要開始做哪些準備。

這些瀏覽器變更對我的網站會有何影響?

這些瀏覽器變更實際會帶來什麼影響?這些變更何時會生效?使用者在明天或下週是否仍可檢視動態內容?

尚未在 Windows 上更新 Internet Explorer 瀏覽器之前, 使用者仍可以目前的方式檢視內嵌的內容和應用程式。此瀏覽器更新版在 2006 年 2 月, 初次發佈為選用更新。在使用者更新瀏覽器後, 使用者就必須先按下內容或「啟動」內容後, 才能與內容互動。您可造訪 Microsoft Developer Network (MSDN) 上的資源*, 以取得更多資訊。

部份網站將不會受到此變更的影響。更新的瀏覽器會提示使用者按鍵, 然後才會顯示使用嵌入 HTML 檔案的 <object><embed><applet> 標籤編碼的動態內容。但是, 使用外部指令碼檔 (例如 JavaScript)產生的標籤之 HTML 網頁, 例如使用複雜 Flash 偵測指令碼的網站, 則可正常運作不受改變。

許多人將需要修改網站以因應這些瀏覽器變更。好消息是您現在就可將其中一個專用的解決方法套用在網站上。

系統需求

範例檔案

download下載 JavaScript 檔 (4K ZIP)

注意: 此範例封存檔包含三個檔案:

現在就行動: 顯示動態內容的增補程式

以下為一些由 Adobe 開發團隊提供的「建置前後」的程式碼範例, 您可用來更新您網站上代管動態內容的 HTML 網頁。

您需要取代的程式碼

以下程式碼 (範例 <object> 標籤)在更新瀏覽器中將沒有作用。

<object classid="clsid:D27CDB6E..." ...>
    <param name="movie" value="foo.swf">
</object>

如果您依下列兩種方式, 以呼叫 HTML 網頁外部程式碼的指令碼取代此標籤, 則它仍可在更新版 IE 中繼續運作。您可造訪 Microsoft Developer Network (MSDN) 上的資源, 以取得更多資訊, 網址為: msdn.microsoft.com/ieupdate/*

我們已測試過此 JavaScript 增補程式;它可在一般現有的瀏覽器上運作。檢視我們的測試表, 以瞭解此解決方案是否適合您的網站使用者。

外部 JavaScript 解決方案一: 適用包含單一 (或少數)內嵌內容的情況

如果您的網站只包含一個或幾個內嵌內容, 您可使用以下簡單的解決方案。若要建置此解決方案, 您需要對網站上每個包含內嵌內容的網頁分別建立唯一的外部 JavaScript (JS) 檔案。

注意: 如果您在單一網頁上加入多個內嵌內容, 則可在外部 JS 檔中對每個內容的 document.write   標籤建立唯一函式 (請參見步驟 1)。此外, 請注意此解決方案未包含在範例檔中;只要依照下列指示, 即可從目前 HTML 網頁中的程式碼建立新的程式碼。

步驟如下:

  1. 建立並取代您網站的外部 JS 檔。在本範例中, 我們將它命名為 foo.js 。此指令碼需要您 HTML 檔案中的完整物件/內嵌標籤 document.write:

    function RunFoo()
    {
        document.write('<object classid="clsid:D27CDB6E..." ...>\n');
        document.write('<param name="movie" value="foo.swf" />\n');
        document.write('</object>\n');
    }
    
  2. 將包含指向步驟 1 中 JavaScript 檔的陳述式之 JavaScript 新增至內嵌此內容的網站的 <head> 區段。

    <script src="[path]/foo.js" type="text/javascript"></script>
    
    
  3. 依下列步驟以適當的外部檔案呼叫取代每個 <object><embed><applet> 標籤:

    <script type="text/javascript">RunFoo();</script>
    
    

外部 JavaScript 解決方案二: 適用包含多個內嵌內容的情況

如果的網站包含許多內嵌動態內容, 或您以多種方式內嵌它, 則本解決方案可為您帶來許多優點。您可對所有內嵌的 Flash 和 Shockwave 內容都使用同一個外部 JS 檔案, 而不需對每個受影響的檔案逐一建立外部 JS 檔案 (如解決方案一)。此 JS 檔案包含根據從主網頁接收到的參數內嵌動態內容的函式。

您需要依下列三步驟來建置此解決方案:

  1. 將包含解決函式的外部 JS 檔複製至網站上的共用位置。在本範例中, 我們將它命名為 AC_RunActiveContent.js, 或其他您選擇的名稱。

    download下載 JavaScript 檔 (4K ZIP)

    AC_RunActiveContent.js 檔中的程式碼會使用您傳給它的引數 (請參見步驟 3), 來建立完整的標籤字串, 並將它寫入您的文件中。

  2. 將包含指向步驟 1 中 JavaScript 檔的陳述式之 JavaScript 新增至您網站上包含物件/內嵌標籤的每個網頁之 <head> 區段。

    <script src="[path]/AC_RunActiveContent.js" type="text/javascript"></script>
  3. 以適當的函式呼叫取代網頁中的 <object><embed> 標籤。您可從下列兩個函式呼叫中做選擇: 一個適用 Flash 內容, 另一個適用 Shockwave 內容。

    AC_FL_RunContent(
        "att1Name","att1Value", 
        "att2Name","att2Value", 
        ... 
        "attnName","attnValue" 
    );
    AC_SW_RunContent( 
        "att1Name","att1Value", 
        "att2Name","att2Value", 
        ... 
        "attnName","attnValue" 
    );
    

    注意: 這些函式需要啟用 JavaScript 才能作用。若要讓停用 JavaScript 的使用者檢視動態內容, 請將每個函式與傳統 <noscript> 標籤中的 <object>/<embed> 標籤搭配使用, 如「要是使用者已關閉 JavaScript 功能時該怎麼辦?」一節中所述。

    當您使用這些新函式呼叫取代物件和內嵌標籤時, 請編輯引數對 (以 "att1Name"、"att1Value" 表示), 加入原始標籤的適當屬性及值, 例如 movieidbgcolor 等。在範例檔 SampleActiveContent.html 中, 您可以看到特定 Flash 檔的程式碼範例。此檔案包含在下載的範例檔中。

    在編輯函式呼叫來傳送影片屬性時, 請勿以影片名稱做為副檔名。請依下列方式傳送影片名稱:

    "movie", "foo".

    外部 JavaScript 程式碼將會加入適當的副檔名。

    如果傳送參數至您的 Flash 檔, 則您原始影片屬性可能會看起來如下:

    foo.swf?username=Bob&color=red

    若要成功傳送名稱和色彩屬性, 請將它們以引數形式加入函式中, 請記得略去副檔名:

    "foo?username=Bob&color=red"

    請記得以名稱/值配對的格式列出您的引數;您必須傳送偶數個數的項目至 AC_RunActiveContent.js 程式碼, 否則將沒有作用。它也會根據特定播放器函式呼叫, 自動插入其他必要設定, 例如 classidmimeType。如果您必須更新其中一個必要設定的值, 請在 AC_RunActiveContent.js 程式碼的 AC_FL_RunContent()AC_SW_RunContent() 函式中編輯這些值。在您的 HTML 網頁中, 僅傳送選用參數的引數。

    以下範例說明如何使用此方式取代播放 Flash 檔的標準嵌入物件和內嵌標籤。如果您需要取代下列程式碼:

    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="550" height="400" align="middle">
        <param name="allowScriptAccess" value="sameDomain" /> 
        <param name="movie" value="foo.swf" /> 
        <param name="quality" value="high" />
        <param name="bgcolor" value="#ffffff" />
    <embed src="foo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="foo" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
    </object>

    您可在此位置中插入下列函式呼叫:

    <script type="text/javascript" >
    AC_FL_RunContent('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0','width','550','height','400','align','middle','src','foo','quality','high','bgcolor','#ffffff','name','foo','allowscriptaccess','sameDomain','pluginspage','http://www.macromedia.com/go/getflashplayer','movie','foo' );
    </script> 
    
    

要是使用者已關閉 JavaScript 功能時該怎麼辦?

上述兩種方式都需要啟用 JavaScript。但是有少數網站訪客會在瀏覽器中停用 JavaScript。所以上述建議方式不適用這些使用者, 而他們將完全看不到您的內嵌內容。請記住許多或大部份停用 JavaScript 的 IE 使用者可能也停用了 ActiveX 支援。不過, 停用 ActiveX 的使用者本來就無法在瀏覽器中看到 Flash 和 Shockwave 內容。移轉至內嵌內容的 JavaScript 技術並不會影響他們的使用體驗。您只需考慮到停用 JavaScript 但啟用 ActiveX 的使用者。

針對停用 JavaScript 但啟用 ActiveX 的少數使用者, 請直接將 <object><embed> 標籤插入 HTML, 但不要將它們置於 <noscript> 標籤中。<noscript> 標籤是提供容錯替代程式碼的標準標籤, 適用於停用 JavaScript 的使用者。以下是以巢狀結構置於 <noscript> 標籤的標準內嵌 Flash 影片範例:

<noscript>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" id="foo" align="middle">
    <param name="allowScriptAccess" value="sameDomain" />
    <param name="movie" value="foo.swf" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#ffffff" />
<embed src="foo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="foo" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</noscript>

當停用 JavaScript 的使用者使用更新的瀏覽器中造訪包含類似上述程式碼的網頁時, 就需要按下內容才能啟動它。然後就可以像以前一樣地與內容互動,

其他動態內容類型的解決方案

在本文章隨附的範例檔中, 我們還加入了名為 AC_ActiveX.js 的 JavaScript 檔。使用上述方式, 您不需要此指令碼就可顯示 Flash 或 Shockwave 內容。但是, 在網頁中使用其他動態內容類型的開發人員則可使用此指令碼來顯示其他內容類型, 而不需讓使用者按鍵來啟動內容。您可將它視為適用多種內容的一般指令碼。您可依前述步驟, 以類似使用 AC_RunActiveContent.js 的方式來運用此指令碼。

若要建置指令碼, 請先使用下列程式碼, 將外部檔案加入 HTML 網頁的 <head> 區段:

<script src="[path]/AC_ActiveX.js" type="text/javascript"></script> 
<script src="[path]/AC_RunActiveContent.js" type="text/javascript"></script>

然後, 依 Flash/Shockwave 的方式, 取代 <object><embed> 程式碼, 依您的內容來修改屬性和值配對:

<script type="text/javascript">
     AC_AX_RunContent( 'classid','clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFB','width','150','height','100','src','fakefile.foo' );
</script>

注意: 您可能也注意到, 此範例程式碼與 HTML 檔 SampleActiveContent.html (包含在下載範例檔中)的範例類似。

敬請期待: 動態內容開發人員中心

Adobe 確信您可使用上述方式成功在您的網站上建置此增補程式。不過我們想要更加確定, 所以我們將會持續提供您各種最新資訊。請隨時注意本網站中顯示動態內容的相關更新和新方式。

關於作者

本文內容由 Adobe Systems, Inc. 撰寫。