如何使用swfobject(中文版)


1.SWFObject是什么?
  • SWFObject 2提供兩種優化flash播放器的嵌入方法:基於標記的方法和依賴於js的方法。
  • SWFObject 2提供一個js的API,為嵌入SWF文件和獲取Flash播放器的相關信息提供了一個完整的工具箱。
  • 只用了一個很小的js文件 (10Kb / GZIPed: 3.9Kb)。
  • SWFObject 1.5, UFO and the Adobe Flash Player Detection Kit的繼承者。
  • 擬統一所有現有的Flash播放器的嵌入方法,並提供了嵌入Adobe Flash Player內容新的標准
2.我們為什么要用SWFObject?
  • 比現在其他的flash嵌入方式要靈活和更加優化。
  • 給任何人提供了解決方案:不管你是html開發者還是flash或者js開發者,都有對應的方法可用。
  • 打破了設定在供應商特定的標記,促進web標准和替代內容的使用。
  • 使用不顯眼的JavaScript和JavaScript最佳實踐。
  • 容易使用。
3.為什么SWFObject使用JavaScript?
      SWFObject使用js來克服那些單獨用標記無法解決的問題:
  • 檢測Flash播放器版本,並確定是否應該顯示Flash內容或替代內容,以避免過時的Flash插件讓Flash內容無法顯示。
  • 萬一flash插件版本太低,通過dom操作可以顯示默認的替換內容,給用戶提供信息。(注意:如果flash插件沒有安裝,dom對象元素自動會顯示替代內容)
  • 提供選項,用於快速安裝的Adobe下載最新的Flash Player
  • 提供一個JavaScript API來執行常見的Flash播放器和Flash內容相關的任務

 

4.我應該使用靜態的還是動態的方法發布?
      SWFObject2提供兩種不同的方法來嵌入Flash Player內容:
  
  • 靜態發布的方法用標准的標記嵌入flash內容和替代元素,並使用js來解決那些單獨用標記無法解決的問題。
  • 動態發布方法是基於標記的替代內容,通過js用flash來替換替代內容,前提是當前flash版本和js支持(像之前的 SWFObject版本和UFO)。
  • 靜態發布的優勢:
    • 促進實際制作符合標准的標記
    • 最佳嵌入性能
    • 嵌入Flash內容的機制,不依賴於腳本語言,所以flash內容可以被更多的人看到(兼容性更好)
      • 如果你有Flash插件安裝,但已禁用JavaScript或使用的瀏覽器不支持JavaScript,您將仍然能夠看到你的Flash內容
      • flash可以運行在對js支持非常糟糕的設備上,比如sony的psp。
      • RSS閱讀器等自動化工具能夠抓到Flash內容
  • 動態發布的優勢:
    • 它與腳本的應用程序很好地集成在一起,能夠使動態變量(flashvars)
    • 它避免了點擊激活機制激活活動內容在Internet Explorer6/7和Opera9+。請注意,微軟已經淘汰了其Internet Explorer瀏覽器的最活躍的內容
5.如何使用SWFObject的靜態方法嵌入Flash Player內容?
  
步驟1:使用符合標准的標記嵌入Flash內容和替代內容
  SWFObject的基礎標記使用嵌套對象的方法(用專有的IE條件注釋),確保僅標記手段的最優化跨瀏覽器支持,而作為符合標准和配套的替代內容。
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 3   <head>
 4     <title>SWFObject - step 1</title>
 5     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 6   </head>
 7   <body>
 8     <div>
 9 
10       <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">
11         <param name="movie" value="myContent.swf" />
12         <!--[if !IE]>-->
13         <object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
14         <!--<![endif]-->
15           <p>Alternative content</p>
16         <!--[if !IE]>-->
17         </object>
18         <!--<![endif]-->
19       </object>
20 
21     </div>
22   </body>
23 </html>
  注:嵌套對象方法需要一個雙對象定義(外部對象針對Internet Explorer和內針對所有其他的瀏覽器的對象),你需要定義你的對象屬性和嵌套的param元素兩次。
  
  需要的屬性:
  • classid(只用於外層元素,值一直是: clsid:D27CDB6E-AE6D-11cf-96B8-444553540000
  • type(只用於內層元素,值一直是: application/x-shockwave-flas
  • data(只用於內層元素,定義swf的路徑:data="myContent.swf"
  • width(定義swf的寬度,內外都用到)
  • height(定義swf的高度,內外都用到)
  需要的參數:
  • movie(只用於內層元素,定義swf的路徑:<param name="movie" value="myContent.swf" />
  • 注意:我們建議不要使用codebase屬性指向Adobe Flash插件安裝程序的URL的服務器,因為這樣是違法的,他限定了只能當前域來訪問。我們建議在替代內容中放一個提示信息,這樣用戶會有更好的體驗而不是下載flash。
  你怎么使用HTML來配置你的Flash內容?
  你能在標簽中加下面的屬性:
  • id
  • name
  • class
  • align 

  你能使用下面的參數:

  為什么你應該使用替代內容?
  對象元素允許你在他里面放替換元素,在flash沒有安裝或者不被支持的時候會顯示。他的內容同樣也會被搜索引擎抓到,他是一個 用於創建搜索引擎友好的內容的非常好的工具。總而言之,你應該使用替換內容,當你想讓你創建的內容可以被沒有裝插件的用戶訪問,對搜索引擎友好,告訴訪問者對應提示,這樣會有更好的用戶體驗而不是直接去下載插件。
步驟2:包括JavaScript庫在你的HTML頁面的頭部
  SWFObject庫是一個外部JavaScript文件。SWFObject一被加載就會被執行,一但dom元素加載完了就會執行dom操作,所有瀏覽器都支持他(   IE, Firefox, Safari and Opera 9+ ),或者是onload事件被觸發。
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 3   <head>
 4     <title>SWFObject - step 2</title>
 5     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 6 
 7     <script type="text/javascript" src="swfobject.js"></script>
 8 
 9   </head>
10   <body>
11     <div>
12       <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">
13         <param name="movie" value="myContent.swf" />
14         <!--[if !IE]>-->
15         <object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
16         <!--<![endif]-->
17           <p>Alternative content</p>
18         <!--[if !IE]>-->
19         </object>
20         <!--<![endif]-->
21       </object>
22     </div>
23   </body>
24 </html>

步驟3:用SWFObject庫注冊您的Flash內容,告訴SWFObject做什么

首先添加一個唯一的ID外部對象標記定義您的Flash內容,第二添加swfobject.registerObject的方法:
  • 第一個參數(字符串,必需)指定標記中使用的ID。
  • 第二個參數(字符串,必需)指定了你內容發布所需要的flash版本。它會激活Flash版本檢測,以確定是否顯示Flash內容或通過dom操作強制顯示替代內容。Flash的版本號通常由major.minor.release.build四部分組成,但是SWFObject只識別前三個數字,所以 "WIN 9,0,18,0" (IE) 或者 "Shockwave Flash 9 r18" (其他瀏覽器)都會被翻譯成 "9.0.18". 如果你只想測試主要版本,你可以省略次要和發行版本號,如“9”,而不是“9.0.0”。
  • 第三個參數(字符串,可選),可用於啟動Adobe快速安裝,並指定您的快速安裝SWF文件的URL。快速安裝會顯示一個標准化的Flash插件下載對話框來替代你的Flash內容,當所需的插件版本不可用。一個默認的expressInstall.swf文件被一起打包在項目中。它也包含了相應的expressInstall.fla和AS文件(在SRC目錄),讓你創建自己的自定義快速安裝體驗。請注意,快速安裝只會觸發一次(他第一次被調用),他只被支持在win平台和mac平台的 Flash Player 6.0.65以上的版本,他會要求一個最小的尺寸是  310x137px。
  • 第四個參數(js函數,可選)用來定義一個回調函數,當插件創建成功或者失敗都可以調用該函數來處理一些事。
  • 1 <script type="text/javascript">
    2     swfobject.registerObject("myId", "9.0.115", "expressInstall.swf");
    3     </script>
小提示:
  • 用SWFObject HTML和js生成器來幫助你編寫代碼。
  • 重復步驟1和3,把多個SWF文件嵌入到一個HTML頁面
  • 引用活動對象元素的最簡單的方法是使用JavaScript API:swfobject.getObjectById(objectIdStr
6.如何使用SWFObject的動態方法嵌入Flash Player內容?
步驟1:使用符合標准的標記,創建替代內容
  SWFObject動態嵌入的方法遵循漸進增強的原則,當有足夠的js和flash插件支持的時候會用flash替代替換的內容。首先定義替代的內容,用一個id標記他。
步驟2:包括JavaScript庫在你的HTML頁面的頭部
  SWFObject庫是一個外部JavaScript文件。SWFObject一被加載就會被執行,一但dom元素加載完了就會執行dom操作,所有瀏覽器都支持他(   IE, Firefox, Safari and   Opera 9+ ),或者是onload事件被觸發。
步驟3:用JavaScript嵌入你的SWF
  swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flashvars, params, attributes, callbackFn)有5個必須的參數和5個可選的參數。
  1. swfUrl (字符串, 必須) 指定您的SWF的URL
  2. id (String, required) 指定包含替換元素的html元素的ID,能用你的flash的內容來替換
  3. width (String, required) 指定SWF的寬度
  4. height (String, required) 指定SWF的高度
  5. version (String, required)指定SWF 發布所需的flash播放器的版本 (格式 is: "major.minor.release" or "major")
  6. expressInstallSwfurl (String, optional)指定快速安裝的路徑,激活快速安裝. 請注意,快速安裝只會觸發一次(他第一次被調用),他只被支持在win平台和mac平台的 Flash Player 6.0.65以上的版本,他會要求一個最小的尺寸是  310x137px。
  7. flashvars (Object, optional) 指定需要傳遞給flash的變量(用鍵值對)
  8. params (Object, optional) 指定嵌入對象的參數(用鍵值對)
  9. attributes (Object, optional) 指定對象的屬性(用鍵值對)
  10. callbackFn (JavaScript function, optional)能定義一個回調函數,不管調用flash創建成功或者失敗都可以調用該函數
小提示:
您可以省略可選參數,只要你不破壞參數順序。如果你不想使用某個參數但是想使用他下一個參數,可以把他的值設置為false,對於flashvars, params and attributes對象,也可以直接用空值{}。
如何配置flash?
  您可以添加以下經常使用的可選屬性的對象元素:
  • id (NOTE: 如果沒有定義會自動取替換元素容器的id)
  • align
  • name
  • styleclass (see note about class)
  • class
注意:class是 ECMA4中保留的關鍵字,在ie中會報錯,除非用引號把它括起來   (e.g. "class" or 'class') 。 出於這個原因,swfobject的提供作為一種安全的替代語法類的styleClass關鍵字,如果你使用的styleClass,swfobject的會自動插入class。
1 var attributes = {
2    id: "myId",
3    align: "left",
4    styleclass: "myclass"
5 };
如果你寧願用class代替styleClass,那么用引號括起來。
1 var attributes = {
2    id: "myId",
3    align: "left",
4    "class": "myclass"
5 };
你能使用下面可選的flash指定的參數:
如何使用JavaScript對象來定義 flashvars, params and object's attributes?
  最好使用對象表示法來定義對象:
 
1 <script type="text/javascript">
2 
3 var flashvars = {};
4 var params = {};
5 var attributes = {};
6 
7 swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
8 
9 </script>
可以用鍵值對的方式寫:
1 var flashvars = {
2   name1: "hello",
3   name2: "world",
4   name3: "foobar"
5 };
也可以用".屬性"的方式寫:
1 var flashvars = {};
2 flashvars.name1 = "hello";
3 flashvars.name2 = "world";
4 flashvars.name3 = "foobar";
也可以直接把參數內容加載swfobject.embedSWF()中。
1 <script type="text/javascript">
2 swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", {name1:"hello",name2:"world",name3:"foobar"}, {menu:"false"}, {id:"myDynamicContent",name:"myDynamicContent"});
3 </script>
如果你不想使用一個可選的參數,你可以把它定義為false或一個空對象  var flashvars = false; var params = {};
FlashVars的對象是一個速記符號,為您的易用性。你可以忽略它,通過 params對象來指定你的flashvars。
 1 <script type="text/javascript">
 2 var flashvars = false;
 3 var params = {
 4   menu: "false",
 5   flashvars: "name1=hello&name2=world&name3=foobar"
 6 };
 7 var attributes = {
 8   id: "myDynamicContent",
 9   name: "myDynamicContent"
10 };
11 swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
12 </script>
從SWFObject 1.5 遷移到 SWFObject 2 的注意點
  1. SWFObject 2不能向后兼容到SWFObject 1.5
  2. 目前首選在你的HTML頁面的頭部插入所有腳本塊,增加到頁面body中可能會產生沖突(比如flash替代替換內容),因為js代碼執行被延后了。
  3. 庫本身都是用小寫的:swfobject,而不是SWFObject
  4. 方法只能通過庫訪問
  5. 此外,JavaScript API是完全不同的和更復雜的
  6. SWFObject 2替換整個替換標簽的內容,包括所引用的HTML容器元素,成為flash內容,只要js可用,flash版本支持。然而, SWFObject 1.5只替換替換表情容器內的內容。如果你沒有定義一個id屬性,對象元素會自動繼承包含元素中的id。
從UFO遷移到SWFObject 1.5 的注意點
  1. SWFObject 2替換整個替換標簽的內容,包括所引用的HTML容器元素,成為flash內容,只要js可用,flash版本支持。然而, UFO只替換替換表情容器內的內容。如果你沒有定義一個id屬性,對象元素會自動繼承包含元素中的id。
  2. UFO's setcontainercss 特征在 SWFObject 2 中沒有被納入。

SWFObject 2是不是支持MIME type application/xhtml+xml?

SWFObject的2不支持XML MIME類型,這是一個設計決定。 有以下原因:
  1. 只有很少(不顯着)web開發者使用
  2. 我們不能確定它走的方向,ie不支持他,其它主要瀏覽器廠商都瞄准了一個新的html解析的標准(html5),他與當前w3c解析的方式不同。
  3. 不支持他我們節省了大量的文件和努力。

參考:https://code.google.com/p/swfobject/wiki/api


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM