更新(2008/4/25):SWFObject 2.0最新的文档的翻译已经整理好了。我将它做成了一个单独的HTML文件,方便大家传阅。下面的翻译文档已经过时,请大家查看这篇最新的翻译文档。 更新(2008/3/29):SWFObject 2.0已经在3月14日正式发布,SWFObject 2.0的官方文档也已经更新,在原来文档的基础上做了一些整理。最近比较忙,暂时没时间整理新的文档,等过段时间闲下来我再补上。 SWFObject是一种易用的、符合标准的在网页中嵌入flash对象的方法,你只需要在网页中引用一个小巧的js文件。相信很多人都使用过SWFObject 1.5或者UFO来动态的嵌入flash对象,那么SWFObject 2.0和SWFObject 1.5以及UFO有什么关系呢?SWFObject 2.0又有什么新的特性和优势呢?这篇SWFObject 2.0官方文档中文版将会告诉你答案。 主要内容:
SWFObject 2.0与SWFObject 1.5和SWFFix有什么关系?SWFObject v2.0是原来的项目SWFFix[ http://code.google.com/p/swffix/ ]的新名字。它是一个由Geoff Stearns、Michael Williams和Bobby van der Sluis发起的开源项目,以创造下一代用于嵌入flash内容的JavaScript类库,并取代SWFObject v1.5 [ http://blog./swfobject/ ]、the Flash player detection kit [ http://www.adobe.com/products/flashplayer/download/detection_kit/ ]和UFO [ http://www./ufo/ ]为目标。 为什么你应该使用SWFObject?一篇A List Apart上的文章Flash Embedding Cage Match描述了SWFObject v2.0背后的基本原理,以及为什么它比其他可用的Flash嵌入方式更好。 怎样使用SWFObject?SWFObject提供了两种嵌入Flash内容的方法:
与第二种方法相比,第一种方法的优势在于:
与第一种方法相比,第二种方法的优势在于:
怎样用符合标准的标签嵌入Flash内容并且用SWFFix来解决出现的问题(第一种嵌入方法)第一步:用符合标准的标签同时嵌入Flash内容和替换内容SWFObject的基本标签使用了嵌套object标签的方法(带有专用于Internet Explorer的条件注释)[ http://www./articles/flashembedcagematch/ ]来保证仅通过标签实现最优化的跨浏览器支持,同时使其符合标准,并且支持替换内容[ http://www./testsuite/ ]: 01. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www./TR/xhtml1/DTD/xhtml1-strict.dtd"> 02. < html xmlns = "http://www./1999/xhtml" lang = "en" xml:lang = "en" > 03. < head > 04. < title >SWFObject v2.0 - step 1</ title > 05. < meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" /> 06. </ head > 07. < body > 08. < div > 09. 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 > 注意:嵌套object标签的方法要求两次定义object标签(外层的object为Internet Explorer定义,内层的object为其他浏览器定义),所以你也需要两次定义你的object属性(attributes)和嵌套的param元素。 必须的属性(attributes):
必须的param元素:
注意:我们建议不使用codebase属性(attributes)来指向Adobe服务器上的Flash插件安装地址,因为它违背了只将访问限制在当前文档域的规范。我们推荐使用带有精巧提示信息的替换内容,这样用户将获得更好的Flash插件下载体验。 怎样使用HTML来配置你的Flash内容?
你可以使用下面这些专用于Flash的可选param元素[ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701 ]:
为什么你应该使用替换内容(alternative content)? 使用嵌套object的方法有哪些缺点?
SWFObject的JavaScript类库会尝试解决这些问题。你最好将它看作一个附加的工具(add-on),它的基本目标是解决使用符合标准标签时出现的问题,同时增加提高用户体验的功能。 注意:目前所有已知的用来避免静态SWF内容的“点击激活”机制的变通方法,都存在严重的缺陷。动态发表(dynamic publishing,第二种嵌入方法)是目前唯一真正可用的避免激活活动内容的解决方案。 第二步:在HTML的head标签中包括SWFObject的JavaScript类库SWFObject的JavaScript类库由一个外部JavaScript文件(大小:10.7Kb,GZIPed:3.5Kb)组成。SWFObject会在外部JavaScript文件被加载后立即被执行,并且对于那些支持DomLoad事件的浏览器,例如 IE、Firefox、Safari和Opera 9+,SWFObject将会在DOM被加载后完成所有的DOM操作,而如果浏览器不支持DomLoad事件,所有DOM操作将会在页面的load事件被触发后执行。 01. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www./TR/xhtml1/DTD/xhtml1-strict.dtd"> 02. < html xmlns = "http://www./1999/xhtml" lang = "en" xml:lang = "en" > 03. < head > 04. < title >SWFObject v2.0 - step 2</ title > 05. < meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" /> 06. 07. < script type = "text/javascript" src = "swfobject.js" ></ script > 08. 09. </ 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 >
第三步:用SWFObject类库注册你的Flash内容并告诉SWFObject怎么样处理这些内容首先为Flash内容的外层object标签添加一个独特的id属性,然后添加swfobject.registerObject方法: 01. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www./TR/xhtml1/DTD/xhtml1-strict.dtd"> 02. < html xmlns = "http://www./1999/xhtml" lang = "en" xml:lang = "en" > 03. < head > 04. < title >SWFObject v2.0 - step 3</ title > 05. < meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" /> 06. < script type = "text/javascript" src = "swfobject.js" ></ script > 07. 08. < script type = "text/javascript" > 09. swfobject.registerObject("myId", "9.0.0", "expressInstall.swf"); 10. </ script > 11. 12. </ head > 13. < body > 14. < div > 15. 16. < object id = "myId" classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width = "780" height = "420" > 17. 18. < param name = "movie" value = "myContent.swf" /> 19. <!--[if !IE]>--> 20. < object type = "application/x-shockwave-flash" data = "myContent.swf" width = "780" height = "420" > 21. <!--<![endif]--> 22. < p >Alternative content</ p > 23. <!--[if !IE]>--> 24. </ object > 25. <!--<![endif]--> 26. </ object > 27. </ div > 28. </ body > 29. </ html >
提示:使用SWFObject 2.0 HTML和JavaScript代码生成器(SWFObject 2.0 HTML and JavaScript generator)来帮助你创建代码:[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_generator ]。 怎样在一个HTML页面中嵌入多个SWF文件?(采用第一种嵌入方法)请重复第一步到第三步(在“怎样用符合标准的标签嵌入Flash内容并且用SWFFix来解决出现的问题(第一种嵌入方法)”中提到的)来添加任意多个SWF文件到你的页面。 怎样在JavaScript中引用活动的object元素?(采用第一种嵌入方法)一个嵌套object方法的副作用就是每个SWF文件在HTML代码中都有两个object元素与之对应,但是你只能使用一个id或者name属性,因为他们在一个页面中必须是独一无二的。 下面的浏览器可能会识别不同的活动object元素:
你可以这样引用活动的object元素:
示例页面:[ http://www./swfobject/testsuite/test_com.html ] 怎样使用SWFObject动态的嵌入Flash内容?(第二种嵌入方法)第一步:用符合标准的标签创建替换内容SWFObject的动态嵌入方法遵循渐进增强(progressive enhancement)[ http://www.adobe.com/devnet/flash/articles/progressive_enhancement.html ]的原则,当浏览器对JavaScript和Flash插件有足够支持的时候,SWFObject会用Flash内容替换HTML内容。首先定义你的替换内容,并且为它添加一个id属性: 01. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www./TR/xhtml1/DTD/xhtml1-strict.dtd"> 02. < html xmlns = "http://www./1999/xhtml" lang = "en" xml:lang = "en" > 03. < head > 04. < title >SWFObject v2.0 dynamic embed - step 1</ title > 05. < meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" /> 06. </ head > 07. < body > 08. 09. < div id = "myContent" > 10. < p >Alternative content</ p > 11. </ div > 12. 13. </ body > 14. </ html >
第二步:在HTML页面的head标签中包括SWFObject JavaScript类库SWFObject的JavaScript类库由一个外部JavaScript文件(大小:10.7Kb,GZIPed:3.5Kb)组成。SWFObject会在外部JavaScript文件被加载后立即被执行,并且对于那些支持DomLoad事件的浏览器,例如 IE、Firefox、Safari和Opera 9+,SWFObject将会在DOM被加载后完成所有的DOM操作,而如果浏览器不支持DomLoad事件,所有DOM操作将会在页面的onload事件被触发后执行。 01. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www./TR/xhtml1/DTD/xhtml1-strict.dtd"> 02. < html xmlns = "http://www./1999/xhtml" lang = "en" xml:lang = "en" > 03. < head > 04. < title >SWFObject v2.0 dynamic embed - step 2</ title > 05. < meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" /> 06. 07. < script type = "text/javascript" src = "swfobject.js" ></ script > 08. 09. </ head > 10. < body > 11. < div id = "myContent" > 12. < p >Alternative content</ p > 13. </ div > 14. </ body > 15. </ html >
第三步:用JavaScript嵌入你的SWFswfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flashvars, params, attributes)有5个必须的参数和4个可选的参数:
01. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www./TR/xhtml1/DTD/xhtml1-strict.dtd"> 02. < html xmlns = "http://www./1999/xhtml" lang = "en" xml:lang = "en" > 03. < head > 04. < title >SWFObject v2.0 dynamic embed - step 3</ title > 05. < meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" /> 06. < script type = "text/javascript" src = "swfobject.js" ></ script > 07. 08. < script type = "text/javascript" > 09. swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0"); 10. </ script > 11. 12. </ head > 13. < body > 14. < div id = "myContent" > 15. < p >Alternative content</ p > 16. </ div > 17. </ body > 18. </ html >
怎样配置你的Flash内容?
你可以使用下面这些专用于Flash的可选param元素[ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701 ]:
怎样用JavaScript对象来定义你的flashvars、params和attributes? 01. <script type= "text/javascript" > 02. 03. var flashvars = {}; 04. var params = {}; 05. var attributes = {}; 06. 07. swfobject.embedSWF( "myContent.swf" , "myContent" , "300" , "120" , "9.0.0" , "expressInstall.swf" , flashvars, params, attributes); 08. 09. </script> 你可以在定义对象的时候添加你的name:value对(注意:请确保不要再对象中的最后一个name:value对后面加上逗号): 01. <script type= "text/javascript" > 02. 03. var flashvars = { 04. name1: "hello" , 05. name2: "world" , 06. name3: "foobar" 07. }; 08. var params = { 09. menu: "false" 10. }; 11. var attributes = { 12. id: "myDynamicContent" , 13. name: "myDynamicContent" 14. }; 15. 16. swfobject.embedSWF( "myContent.swf" , "myContent" , "300" , "120" , "9.0.0" , "expressInstall.swf" , flashvars, params, attributes); 17. 18. </script> 或者在对象创建之后用点号添加属性(properties)和值: 01. <script type= "text/javascript" > 02. 03. var flashvars = {}; 04. flashvars.name1 = "hello" ; 05. flashvars.name2 = "world" ; 06. flashvars.name3 = "foobar" ; 07. 08. var params = {}; 09. params.menu = "false" ; 10. 11. var attributes = {}; 12. attributes.id = "myDynamicContent" ; 13. attributes.name = "myDynamicContent" ; 14. 15. swfobject.embedSWF( "myContent.swf" , "myContent" , "300" , "120" , "9.0.0" , "expressInstall.swf" , flashvars, params, attributes); 16. 17. </script> 上面的代码也可以这样写(为那些喜欢单行代码的顽固脚本程序员准备的不易读的简写版本(the less readable shorthand version for the die-hard scripter who love one-liners)): 1. <script type= "text/javascript" > 2. 3. swfobject.embedSWF( "myContent.swf" , "myContent" , "300" , "120" , "9.0.0" , "expressInstall.swf" , {name1: "hello" ,name2: "world" ,name3: "foobar" }, {menu: "false" }, {id: "myDynamicContent" ,name: "myDynamicContent" }); 4. 5. </script> 如果你不想使用一个参数,你可以将它定义为false或者一个空对象: 01. <script type= "text/javascript" > 02. 03. var flashvars = false ; 04. var params = {}; 05. var attributes = { 06. id: "myDynamicContent" , 07. name: "myDynamicContent" 08. }; 09. 10. swfobject.embedSWF( "myContent.swf" , "myContent" , "300" , "120" , "9.0.0" , "expressInstall.swf" , flashvars, params, attributes); 11. 12. </script> flashvars对象是一个为了增加易用性而设计的作为快捷方式的参数,所以你可以先忽略它,然后在params对象中指定你的flashvars: 01. <script type= "text/javascript" > 02. 03. var flashvars = false ; 04. var params = { 05. menu: "false" , 06. flashvars: "name1=hello&name2=world&name3=foobar" 07. }; 08. var attributes = { 09. id: "myDynamicContent" , 10. name: "myDynamicContent" 11. }; 12. 13. swfobject.embedSWF( "myContent.swf" , "myContent" , "300" , "120" , "9.0.0" , "expressInstall.swf" , flashvars, params, attributes); 14. 15. </script>
提示:使用SWFObject 2.0 HTML和JavaScript代码生成器(SWFObject 2.0 HTML and JavaScript generator)来帮助你创建代码:[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_generator ]。 怎样在一个HTML页面中嵌入多个SWF文件?(采用第二种嵌入方法)请重复第一步到第三步(在“怎样使用SWFObject动态的嵌入Flash内容?(第二种嵌入方法)”中提到的)来添加任意多个SWF文件到你的页面。 怎样使用SWFObject的JavaScript类库获得Flash Player的相关信息?SWFObject包含了一个公共API,通过它你可以用JavaScript获得Flash Player的相关信息。 swfobject.getFlashPlayerVersion()返回一个包含了已安装Flash Player主要版本(major:Number)、次要版本(minor:Number)、发行版本(release:Number)的JavaScript对象: 1. var playerVersion = swfobject.getFlashPlayerVersion(); // returns a JavaScript object 2. var majorVersion = playerVersion.major; // access the major, minor and release version numbers via their respective properties
swfobject.hasFlashPlayerVersion(versionNumbersString)返回一个Boolean值,表明特定版本的Flash插件是否已被安装: 1. if (swfobject.hasFlashPlayerVersion( "9.0.18" )) { 2. // has Flash 3. } 4. else { 5. // no Flash 6. }
需要注意的是,表示Flash版本的数字通常由四部分组成:major.minor.release.build,但是SWFObject只识别前3个数字,所以“WIN 9,0,18,0”(IE)或者“Shockwave Flash 9 r18”(其他浏览器)都会被翻译为“9.0.18”。 SWFObject v2.0与其他一些相似的类库,例如SWFObject v1.5和UFO,相比有什么不同?第二种嵌入方法(在“怎样使用SWFObject?”中描述的)的工作方式跟SWFObject v1.5和UFO类似,都是用JavaScript动态的将替换内容替换为Flash内容。 第一种嵌入方法的工作原理则与上面的不同,它使用符合标准的标签嵌入Flash内容,然后用JavaScript来解决使用标签嵌入时出现的一些问题。这种新方法的优势在于:
与第一种方法相比,第二种方法的优势在于:
从SWFObject v1.5迁移到SWFObject v2.0的注意事项
从UFO迁移到SWFObject v2.0的注意事项
使用SWFObject会有什么风险?当选择第一种嵌入方法时:
需要注意的是,虽然这种嵌入方法有它的风险,但出现的几率不会比其他可用的嵌入方法更大。 当选择第二种嵌入方法时:
SWFObject支持MIME类型application/xhtml+xml吗?出于设计上的考虑,SWFObject不支持MIME类型。 我们不提供支持的理由有很多:
Tags: flash, JavaScript, SWFObject, ufo, 翻译 This entry was posted on 星期四, 十二月 27th, 2007 at 3:29 下午 and is filed under Flash&Flex, JavaScript&AJAX. You can follow any comments to this entry through the RSS 2.0 feed. You can leave a comment, or trackback from your own site. |
|