SWFObject是一种易用的、符合标准的在网页中嵌入flash对象的方法,你只需要在网页中引用一个小巧的js文件。相信很多人都使用过SWFObject 1.5或者UFO来动态的嵌入flash对象,那么SWFObject 2.0和SWFObject 1.5以及UFO有什么关系呢?SWFObject 2.0又有什么新的特性和优势呢?这篇SWFObject 2.0官方文档中文版将会告诉你答案。 :cool:

  • 原文:http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation

主要内容:

  • SWFObject 2.0与SWFObject 1.5和SWFFix有什么关系?
  • 为什么你应该使用SWFObject?
  • 怎样使用SWFObject?
  • 怎样用符合标准的标签嵌入Flash内容并且用SWFFix来解决出现的问题(第一种嵌入方法)
  • 怎样在一个HTML页面中嵌入多个SWF文件?(采用第一种嵌入方法)
  • 怎样在JavaScript中引用活动的object元素?(采用第一种嵌入方法)
  • 怎样使用SWFObject动态的嵌入Flash内容?(第二种嵌入方法)
  • 怎样在一个HTML页面中嵌入多个SWF文件?(采用第二种嵌入方法)
  • 怎样使用SWFObject的JavaScript类库获得Flash Player的相关信息?
  • SWFObject v2.0与其他一些相似的类库,例如SWFObject v1.5和UFO,相比有什么不同?
  • 从SWFObject v1.5迁移到SWFObject v2.0的注意事项
  • 从UFO迁移到SWFObject v2.0的注意事项
  • 使用SWFObject会有什么风险?
  • SWFObject支持MIME类型application/xhtml+xml吗?

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.deconcept.com/swfobject/ ]、the Flash player detection kit [ http://www.adobe.com/products/flashplayer/download/detection_kit/ ]和UFO [ http://www.bobbyvandersluis.com/ufo/ ]为目标。

为什么你应该使用SWFObject?

一篇A List Apart上的文章Flash Embedding Cage Match描述了SWFObject v2.0背后的基本原理,以及为什么它比其他可用的Flash嵌入方式更好。

怎样使用SWFObject?

SWFObject提供了两种嵌入Flash内容的方法:

  1. 用符合标准的标签来嵌入Flash内容和替换内容(译者注:替换内容指Flash插件没有安装时需要显示的内容),并且用JavaScript来解决使用标签嵌入时出现的一些问题(这种方法也被称之为静态发表(static publishing))。
  2. 使用标准的标签插入替换内容,并用unobtrusive(译者注:这个词的翻译争议比较大,暂且不译,可以理解为低调的、不唐突的)的JavaScript来嵌入Flash内容(与以前版本的SWFObject以及UFO很相似,这种方法也被称之为动态发表(dynamic publishing))。

与第二种方法相比,第一种方法的优势在于:

  1. 更能实际的控制对符合标准标签的创作。(The actual authoring of standards compliant markup is promoted.)
  2. 插入Flash内容的机制不再依赖于JavaScript,所以这种方法适当的“降级”了。
    • 如果你安装了Flash插件,但是JavaScript被禁用了或者浏览器并不支持JavaScript,你仍然能够看到你的Flash内容。
    • Flash将能够在那些对JavaScript支持较弱的设备上运行,例如Sony PSP。
    • 像RSS阅读器这样的自动化的工具能够读取Flash内容。

与第一种方法相比,第二种方法的优势在于:

  1. 更容易被编写和维护,因为它显得更简洁,没有包含多余的代码。
  2. 避免了通过“点击激活”的机制来激活Internet Explorer 6+和Opera 9+中的Flash内容。

怎样用符合标准的标签嵌入Flash内容并且用SWFFix来解决出现的问题(第一种嵌入方法)

第一步:用符合标准的标签同时嵌入Flash内容和替换内容

SWFObject的基本标签使用了嵌套object标签的方法(带有专用于Internet Explorer的条件注释)[ http://www.alistapart.com/articles/flashembedcagematch/ ]来保证仅通过标签实现最优化的跨浏览器支持,同时使其符合标准,并且支持替换内容[ http://www.swffix.org/testsuite/ ]:

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"lang="en"xml:lang="en"><head><title>SWFObject v2.0 - step 1</title><metahttp-equiv="Content-Type"content="text/html; charset=iso-8859-1"/></head><body><div><objectclassid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"width="780"height="420"><paramname="movie"value="myContent.swf"/><!--[if !IE]>--><objecttype="application/x-shockwave-flash"data="myContent.swf"width="780"height="420"><!--<![endif]--><p>Alternative content</p><!--[if !IE]>--></object><!--<![endif]--></object></div></body></html>

注意:嵌套object标签的方法要求两次定义object标签(外层的object为Internet Explorer定义,内层的object为其他浏览器定义),所以你也需要两次定义你的object属性(attributes)和嵌套的param元素。

必须的属性(attributes):

  • classid(只需为外层object元素定义,值总是等于“clsid:D27CDB6E-AE6D-11cf-96B8-444553540000”)
  • type(只需为内层object元素定义,值总是等于“application/x-shockwave-flash”)
  • data(只需为内层object元素定义,指定SWF文件的URL)
  • width(内外层object都需要定义,指定这个SWF的宽)
  • width(内外层object都需要定义,指定这个SWF的高)

必须的param元素:

  • movie(只需为外层object元素定义,指定SWF文件的URL)

注意:我们建议不使用codebase属性(attributes)来指向Adobe服务器上的Flash插件安装地址,因为它违背了只将访问限制在当前文档域的规范。我们推荐使用带有精巧提示信息的替换内容,这样用户将获得更好的Flash插件下载体验。

怎样使用HTML来配置你的Flash内容?
你可以为你的object元素添加下面这些常用的可选属性(attributes)[ http://www.w3schools.com/tags/tag_object.asp ]:

  • id
  • name
  • class
  • align

你可以使用下面这些专用于Flash的可选param元素[ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701 ]:

  • play
  • loop
  • menu
  • quality
  • scale
  • salign
  • wmode
  • bgcolor
  • base
  • swliveconnect
  • flahvars
  • devicefont [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_13331 ]
  • allowscriptaccess [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_16494 ]
  • seamlesstabbing [ http://www.adobe.com/support/documentation/en/flashplayer/7/releasenotes.html ]
  • allowfullscreen [ http://www.adobe.com/devnet/flashplayer/articles/full_screen_mode.html ]
  • allownetworking [ http://livedocs.adobe.com/flash/9.0/main/00001079.html ]

为什么你应该使用替换内容(alternative content)?
object元素允许你将替换内容嵌套在其中,如果Flash插件没有安装或者不被支持那么这些替换内容就会被显示出来。由于这些替换内容能被搜索引擎很好的识别,这使它成为一个创建对搜索引擎友好的网页内容的好工具。总之,当你想创建一个能够让不使用插件的用户[ http://www.adobe.com/devnet/flash/articles/progressive_enhancement_03.html ]也可以访问的网页内容,创建一个对搜索引擎友好[ http://www.adobe.com/devnet/flash/articles/progressive_enhancement_04.html ]的网页内容,或者告诉访问者他们能获得更好的Flash插件下载体验,你就应该使用替换内容。

使用嵌套object的方法有哪些缺点?
当你仔细观察这个标签方法对跨浏览器的支持时,你会发现它有下面一些不足之处:

  1. Safari 1.2.2或者更低的版本将忽略所有的嵌套param元素。
  2. Windows XP SP2+上的Internet Explorer 6+或者Opera 9+会包括一个“点击激活”的机制。
  3. 老版本的Flash Player有一定的风险让你的Flash内容被错误的显示或者根本不被显示。

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事件被触发后执行。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"lang="en"xml:lang="en"><head><title>SWFObject v2.0 - step 2</title><metahttp-equiv="Content-Type"content="text/html; charset=iso-8859-1"/><scripttype="text/javascript"src="swfobject.js"></script></head><body><div><objectclassid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"width="780"height="420"><paramname="movie"value="myContent.swf"/><!--[if !IE]>--><objecttype="application/x-shockwave-flash"data="myContent.swf"width="780"height="420"><!--<![endif]--><p>Alternative content</p><!--[if !IE]>--></object><!--<![endif]--></object></div></body></html>

第三步:用SWFObject类库注册你的Flash内容并告诉SWFObject怎么样处理这些内容

首先为Flash内容的外层object标签添加一个独特的id属性,然后添加swfobject.registerObject方法:
第一个参数(String,必须的)指定object标签中使用的id。
第二个参数(String,必须的)指定你发布的Flash内容对应的Flash Player版本。它将激活Flash版本监测,用来决定是显示Flash内容还是通过一些DOM操作来显示替换内容。表示Flash版本的数字通常由四部分组成:major.minor.release.build,但是SWFObject只识别前3个数字,所以“WIN 9,0,18,0”(IE)或者“Shockwave Flash 9 r18”(其他浏览器)都会被翻译为“9.0.18”。
第三个参数(String,可选的)可以用来激活Adobe express install [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 ],并指定express install SWF文件的URL。Express install将会在所需要的Flash Player版本不可用的时候,显示一个标准化的Flash插件下载对话框,用来替代你的Flash内容。一个默认的expressInstall.swf文件被一起打包在了项目中。项目中也包含了expressInstall.fla和其他AS源文件(在SRC文件夹中),你可以用它们用性设计的作创建自定义的express install体验。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"lang="en"xml:lang="en"><head><title>SWFObject v2.0 - step 3</title><metahttp-equiv="Content-Type"content="text/html; charset=iso-8859-1"/><scripttype="text/javascript"src="swfobject.js"></script><scripttype="text/javascript">swfobject.registerObject("myId", "9.0.0", "expressInstall.swf");</script></head><body><div><objectid="myId"classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"width="780"height="420"><paramname="movie"value="myContent.swf"/><!--[if !IE]>--><objecttype="application/x-shockwave-flash"data="myContent.swf"width="780"height="420"><!--<![endif]--><p>Alternative content</p><!--[if !IE]>--></object><!--<![endif]--></object></div></body></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元素:

  • Windows下的Internet Explorer的只知别外层的object元素,因为内层的object被条件注释掉了。
  • Opera和Safari都支持外层的object标签(参考:[ http://www.swffix.org/testsuite/ ],行:object ActiveX)。
  • Firefox、Mozilla和其他基于Gecko的浏览器使用内层的object。

你可以这样引用活动的object元素:

  1. 为外层的object元素添加一个id
  2. 使用下面的代码来引用object元素:
    varobj=swfobject.getObjectById("myId");if(obj){obj.doSomething();// e.g. an external interface call}

示例页面:[ http://www.swffix.org/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属性:

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"lang="en"xml:lang="en"><head><title>SWFObject v2.0 dynamic embed - step 1</title><metahttp-equiv="Content-Type"content="text/html; charset=iso-8859-1"/></head><body><divid="myContent"><p>Alternative content</p></div></body></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事件被触发后执行。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"lang="en"xml:lang="en"><head><title>SWFObject v2.0 dynamic embed - step 2</title><metahttp-equiv="Content-Type"content="text/html; charset=iso-8859-1"/><scripttype="text/javascript"src="swfobject.js"></script></head><body><divid="myContent"><p>Alternative content</p></div></body></html>

第三步:用JavaScript嵌入你的SWF

swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flashvars, params, attributes)有5个必须的参数和4个可选的参数:

  1. swfUrl(String,必须的)指定SWF的URL。
  2. id(String,必须的)指定将会被Flash内容替换的HTML元素(包含你的替换内容)的id。
  3. width(String,必须的)指定SWF的宽。
  4. height(String,必须的)指定SWF的高。
  5. version(String,必须的)指定你发布的SWF对应的Flash Player版本(格式为:major.minor.release)。
  6. expressInstallSwfurl(String,可选的)指定express install SWF的URL并激活Adobe express install [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 ]。
  7. flashvars(String,可选的)用name:value对指定你的flashvars。
  8. params(String,可选的)用name:value对指定你的嵌套object元素的params。
  9. attributes(String,可选的)用name:value对指定object的属性。
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"lang="en"xml:lang="en"><head><title>SWFObject v2.0 dynamic embed - step 3</title><metahttp-equiv="Content-Type"content="text/html; charset=iso-8859-1"/><scripttype="text/javascript"src="swfobject.js"></script><scripttype="text/javascript">swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0");</script></head><body><divid="myContent"><p>Alternative content</p></div></body></html>

怎样配置你的Flash内容?
你可以为你的object元素添加下面这些常用的可选属性(attributes)[ http://www.w3schools.com/tags/tag_object.asp ]:

  • id
  • name
  • styleclass(不使用class,因为class也是ECMA4的保留关键字)
  • align

你可以使用下面这些专用于Flash的可选param元素[ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701 ]:

  • play
  • loop
  • menu
  • quality
  • scale
  • salign
  • wmode
  • bgcolor
  • base
  • swliveconnect
  • flahvars
  • devicefont [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_13331 ]
  • allowscriptaccess [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_16494 ]
  • seamlesstabbing [ http://www.adobe.com/support/documentation/en/flashplayer/7/releasenotes.html ]
  • allowfullscreen [ http://www.adobe.com/devnet/flashplayer/articles/full_screen_mode.html ]
  • allownetworking [ http://livedocs.adobe.com/flash/9.0/main/00001079.html ]

怎样用JavaScript对象来定义你的flashvars、params和attributes?
你最好用对象的字面量(Object literal notation)来定义JavaScrpt对象,例如这样:

<scripttype="text/javascript">varflashvars={};varparams={};varattributes={};swfobject.embedSWF("myContent.swf","myContent","300","120","9.0.0","expressInstall.swf",flashvars,params,attributes);
 
<
/script>

你可以在定义对象的时候添加你的name:value对(注意:请确保不要再对象中的最后一个name:value对后面加上逗号):

<scripttype="text/javascript">varflashvars={name1:"hello",name2:"world",name3:"foobar"};varparams={menu:"false"};varattributes={id:"myDynamicContent",name:"myDynamicContent"};swfobject.embedSWF("myContent.swf","myContent","300","120","9.0.0","expressInstall.swf",flashvars,params,attributes);
 
<
/script>

或者在对象创建之后用点号添加属性(properties)和值:

<scripttype="text/javascript">varflashvars={};flashvars.name1="hello";flashvars.name2="world";flashvars.name3="foobar";varparams={};params.menu="false";varattributes={};attributes.id="myDynamicContent";attributes.name="myDynamicContent";swfobject.embedSWF("myContent.swf","myContent","300","120","9.0.0","expressInstall.swf",flashvars,params,attributes);
 
<
/script>

上面的代码也可以这样写(为那些喜欢俏皮话的顽固脚本程序员准备的不易读的简写版本(the less readable shorthand version for the die-hard scripter who love one-liners)):

<scripttype="text/javascript">swfobject.embedSWF("myContent.swf","myContent","300","120","9.0.0","expressInstall.swf",{name1:"hello",name2:"world",name3:"foobar"},{menu:"false"},{id:"myDynamicContent",name:"myDynamicContent"});
 
<
/script>

如果你不想使用一个参数,你可以将它定义为false或者一个空对象:

<scripttype="text/javascript">varflashvars=false;varparams={};varattributes={id:"myDynamicContent",name:"myDynamicContent"};swfobject.embedSWF("myContent.swf","myContent","300","120","9.0.0","expressInstall.swf",flashvars,params,attributes);
 
<
/script>

flashvars对象是一个为了增加易用性而设计的作为快捷方式的参数,所以你可以先忽略它,然后在params对象中指定你的flashvars:

<scripttype="text/javascript">varflashvars=false;varparams={menu:"false",flashvars:"name1=hello&name2=world&name3=foobar"};varattributes={id:"myDynamicContent",name:"myDynamicContent"};swfobject.embedSWF("myContent.swf","myContent","300","120","9.0.0","expressInstall.swf",flashvars,params,attributes);
 
<
/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对象:

varplayerVersion=swfobject.getFlashPlayerVersion();// returns a JavaScript objectvarmajorVersion=playerVersion.major;// access the major, minor and release version numbers via their respective properties

swfobject.hasFlashPlayerVersion(versionNumbersString)返回一个Boolean值,表明特定版本的Flash插件是否已被安装:

if(swfobject.hasFlashPlayerVersion("9.0.18")){// has Flash}else{// no Flash}

需要注意的是,表示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来解决使用标签嵌入时出现的一些问题。这种新方法的优势在于:

  1. 更能实际的掌握对符合标准标签的创作。(The actual authoring of standards compliant markup is promoted.)
  2. 插入Flash内容的机制不再依赖于JavaScript,所以这种方法适当的“降级”了。
    • 如果你安装了Flash插件,但是JavaScript被禁用了或者浏览器并不支持JavaScript,你仍然能够看到你的Flash内容。
    • Flash将能够在那些对JavaScript支持较弱的设备上运行,例如Sony PSP。
    • 像RSS阅读器这样的自动化的工具能够读取Flash内容。

与第一种方法相比,第二种方法的优势在于:

  1. 更容易被编写和维护,因为它显得更简洁,没有包含多余的代码。
  2. 避免了通过“点击激活”的机制来激活Internet Explorer 6+和Opera 9+中的Flash内容。

从SWFObject v1.5迁移到SWFObject v2.0的注意事项

  1. 现在更倾向于在HTML页面的head标签中插入所有的脚本文件。
  2. 现在类库使用的是小写:swfobject,而不是SWFObject。
  3. 现在只能通过类库(的类)来访问方法(译者注:即静态方法),而不是像从SWFObject v1.5中那样通过SWFObject的实例来访问。
  4. API跟以前完全不同了,而且更详尽:[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_api_javascript_dev ]。
  5. 如果浏览器对JavaScript和Flash有足够的支持,SWFObject 2.0会将整个替换内容,包括被引用的HTML容器元素,替换为Flash内容,而不是像SWFObject 1.5那样,只把被引用容器里面的内容替换为Flash内容。你现在可以这样转移你的CSS规则:为你的Flash内容定义与替换内容的容器元素相同的id(前者将替换后者,所以你的id不会重复)。

从UFO迁移到SWFObject v2.0的注意事项

  1. 如果浏览器对JavaScript和Flash有足够的支持,SWFObject 2.0会将整个替换内容,包括被引用的HTML容器元素,替换为Flash内容,而不是像UFO那样,只把被引用容器里面的内容替换为Flash内容。你现在可以这样转移你的CSS规则:为你的Flash内容定义与替换内容的容器元素相同的id(前者将替换后者,所以你的id不会重复)。
  2. UFO的setcontainercss特性没有被合并到SWFObject 2.0中,但是使用SWFObject 2.0的API可以很容易的实现相同的功能,请参考:[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_api_javascript_dev ]中的swfobject.createCSS(selStr, declStr)。

使用SWFObject会有什么风险?

当选择第一种嵌入方法时:

  1. 73%的web用户(IE6、IE7和Opera共同占有的市场份额,数据来源:thecounter.com [ http://www.thecounter.com/stats/2007/September/browser.php ])会因为“点击激活”的机制获得一些不好的用户体验。
  2. 不超过1%的web用户可能会看到错误的Flash内容:
    • 当你以Flash Player 9发布Flash内容,但用户只安装了Flash Player 6,这时用户可能会看到错误的内容或者看不到任何内容。出现这种情况的概率是0.4%左右(大约6%的用户没有安装Flash Player 9,同时有6%的用户禁用了JavaScript)。
    • 当你以Flash Player 8发布Flash内容,但用户只安装了Flash Player 6,这时用户可能会看到错误的内容或者看不到任何内容。出现这种情况的概率是0.04%左右(大约0.7%的用户没有安装Flash Player 8,同时有6%的用户禁用了JavaScript)。(数据来源:thecounter.com [ http://www.thecounter.com/stats/2007/September/javas.php ]和Adobe [ http://www.adobe.com/products/player_census/flashplayer/version_penetration.html ])

需要注意的是,虽然这种嵌入方法有它的风险,但出现的几率不会比其他可用的嵌入方法更大。

当选择第二种嵌入方法时:

  • 6%的web用户禁用了JavaScript,或者使用了不支持JavaScript的浏览器,或者使用的浏览器对JavaScript的支持不足,这时用户将看不到任何Flash内容(无论用户是否已安装了最新的Flash Player),但他们能看到相应的替换内容。(数据来源:thecounter.com [ http://www.thecounter.com/stats/2007/September/javas.php ])

SWFObject支持MIME类型application/xhtml+xml吗?

出于设计上的考虑,SWFObject不支持MIME类型。

我们不提供支持的理由有很多:

  • 只有很少一部分(并不重要)web开发者使用它。
  • 我们不确定那是否今后的发展方向。Internet Explorer并不支持它,而其他主流的浏览器将它们的目标定在了一种新的HTML解析标准(以及HTML 5),而这将偏离目前W3C所提倡的将HTML解析为XML。
  • 考虑到节省文件大小,以及时间、精力的限制(主要在测试和解决疑难问题方面),我们不提供对它的支持。
本文转自 OldHawk  博客园博客,原文链接:http://www.cnblogs.com/taobataoma/archive/2008/04/15/1154019.html,如需转载请自行联系原作者

翻译:SWFObject 2.0官方文档相关推荐

  1. SWFObject 2.0官方文档

    SWFObject 2.0官方文档 2008年4月24日 翻译:farthinker 主要内容: 1 . 什么是SWFObject 2.0? 2 . 为什么你应该使用SWFObject 2.0? 3 ...

  2. 翻译:SWFObject 2.0官方文档(用来做flash的js)

    http://www.cnblogs.com/taobataoma/archive/2008/04/15/1154019.html

  3. CUDA10.0官方文档的翻译与学习之编程接口

    目录 背景 用nvcc编译 编译工作流 二进制适配性 ptx适配性 应用适配性 C/C++适配性 64位适配性 cuda c运行时 初始化 设备内存 共享内存 页锁主机内存 可移植内存 写合并内存 映 ...

  4. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(上)

    Hyperledger Fabric 2.0 官方文档中文版第6章 教程上 总目录 6.教程(上) 将智能合约部署到通道 启动网络 Logspout设置 打包智能合约 安装链码包 批准链码定义 将链码 ...

  5. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(下)

    Hyperledger Fabric 2.0 官方文档中文版 第6章 教程下 总目录 6.教程(下) 使用CouchDB 为什么使用CouchDB? 在Hyperledger Fabric中启用Cou ...

  6. Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念

    Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念 总目录 3.关键概念 引言 什么是区块链? 区块链为什么有用? 什么是Hyperledger Fabric? Hyper ...

  7. Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序

    Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序 总目录 5.开发应用程序 情景 PaperNet网络 介绍参与者 分析 商业票据生命周期 交易 账本 过程和数据设计 ...

  8. Hyperledger Fabric 2.0 官方文档中文版 第1章 引言

    Hyperledger Fabric 2.0 官方文档中文版 第1章 引言 总目录 1.引言 Hyperledger Fabric 模块化 许可区块链与无许可区块链 智能合约 新途径 隐私和保密 可插 ...

  9. 对STIX2.0标准12个构件的解读(续)——对STIX2.0官方文档的翻译

    官方文档地址:点击即可 1.  攻击模式(Attack Pattern) 类别名称: attack-pattern 攻击模式是TTP的一种,描述了攻击者试图破坏目标的方式.攻击模式用于帮助对攻击进行分 ...

  10. Spring Boot 2.0官方文档之 Actuator

    https://blog.csdn.net/alinyua/article/details/80009435 前言:本文翻译自Spring Boot 2.0.1.RELEASE官方文档,该Spring ...

最新文章

  1. 在实践中我遇到stompjs, websocket和nginx的问题与总结
  2. Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel
  3. 分布式应用的未来 — Distributionless
  4. egret.Shape渲染集合图形
  5. 用JavaScript往DIV动态添加内容
  6. pinpoint 监控mysql_基于Centos7系统安装部署Pinpoint分布式监控
  7. 和 jQuery 说再见!Bootstrap 5 将移除对其依赖
  8. 在Windows Phone中使用HTML编程
  9. Linux制作简版的镜像,手把手教你制作一个精简版Windows10镜像
  10. 货物列车尾部安全防护装置
  11. Windows添加共享文件夹添加一个网络位置图文教程
  12. Python进行拉勾网数据爬取框架与思路
  13. 米3从android6降回4,从5G到4G,三个月的思考后我从小米9 pro降级到了小米9T pro
  14. html div 自动滚动到底部,javascript让DIV的滚动自动滚动到最底部-4种方法
  15. linux驱动文件目录
  16. 可用的rtmp,rtsp,http网络流地址(2020-08-27更新)
  17. 移动端测试——移动端基础
  18. matlab在解线性方程组的应用,matlab解线性方程组线性方程组及MATLAB应用
  19. 数字藏品赋能实体产业释放了哪些利好?
  20. C语言之1到100之间偶数之和与奇数之和

热门文章

  1. 博弈论的经典入门课程和资料
  2. 防火墙服务器-iptables
  3. 计算机故障报警声2声,电脑开机报警声音2短4短是什么問題?
  4. OSPF开销值、协议优先级及计时器的修改
  5. McAfee Endpoint Security 10.6卸载
  6. 病毒提示广告调查:投放色情网站 每日千人中招
  7. 社工程序员(社会工程学)有关概述与讲解
  8. 清华大学计算机直硕生,推免数据 | 清华大学计算机系三大巨变——直硕生减半,本校增多,211增多...
  9. Second copy 的增量备份
  10. CodeBlock代码替换