翻译:SWFObject 2.0官方文档

简介:

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/ ]:

< ! DOCTYPE   html   PUBLIC   " -//W3C//DTD XHTML 1.0 Strict//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " >
< html   xmlns = " http://www.w3.org/1999/xhtml "   lang = " en "   xml:lang = " en " >
  
< head >
    
< title > SWFObject v2.0 - step 1 </ title >
    
< meta   http-equiv = " Content-Type "   content = " text/html; charset=iso-8859-1 "   />
  
</ head >
  
< body >
    
< div >
 
      
< object   classid = " clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 "   width = " 780 "   height = " 420 " >
        
< param   name = " movie "   value = " myContent.swf "   />
        
<!--[if !IE]>-->
        
< object   type = " 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事件被触发后执行。

< ! DOCTYPE   html   PUBLIC   " -//W3C//DTD XHTML 1.0 Strict//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " >
< html   xmlns = " http://www.w3.org/1999/xhtml "   lang = " en "   xml:lang = " en " >
  
< head >
    
< title > SWFObject v2.0 - step 2 </ title >
    
< meta   http-equiv = " Content-Type "   content = " text/html; charset=iso-8859-1 "   />
 
    
< script   type = " text/javascript "   src = " swfobject.js " ></ script >
 
  
</ head >
  
< body >
    
< div >
      
< object   classid = " clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 "   width = " 780 "   height = " 420 " >
        
< param   name = " movie "   value = " myContent.swf "   />
        
<!--[if !IE]>-->
        
< object   type = " 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体验。

< ! DOCTYPE   html   PUBLIC   " -//W3C//DTD XHTML 1.0 Strict//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " >
< html   xmlns = " http://www.w3.org/1999/xhtml "   lang = " en "   xml:lang = " en " >
  
< head >
    
< title > SWFObject v2.0 - step 3 </ title >
    
< meta   http-equiv = " Content-Type "   content = " text/html; charset=iso-8859-1 "   />
    
< script   type = " text/javascript "   src = " swfobject.js " ></ script >
 
    
< script   type = " text/javascript " >
    swfobject.registerObject("myId", "9.0.0", "expressInstall.swf");
    
</ script >
 
  
</ head >
  
< body >
    
< div >
 
      
< object   id = " myId "   classid = " clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 "   width = " 780 "   height = " 420 " >
 
        
< param   name = " movie "   value = " myContent.swf "   />
        
<!--[if !IE]>-->
        
< object   type = " 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元素:
    var   obj  =  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属性:

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

< ! DOCTYPE   html   PUBLIC   " -//W3C//DTD XHTML 1.0 Strict//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " >
< html   xmlns = " http://www.w3.org/1999/xhtml "   lang = " en "   xml:lang = " en " >
  
< head >
    
< title > SWFObject v2.0 dynamic embed - step 2 </ title >
    
< meta   http-equiv = " Content-Type "   content = " text/html; charset=iso-8859-1 "   />
  
    
< script   type = " text/javascript "   src = " swfobject.js " ></ script >
 
  
</ head >
  
< body >
    
< div   id = " 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的属性。
< ! DOCTYPE   html   PUBLIC   " -//W3C//DTD XHTML 1.0 Strict//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " >
< html   xmlns = " http://www.w3.org/1999/xhtml "   lang = " en "   xml:lang = " en " >
  
< head >
    
< title > SWFObject v2.0 dynamic embed - step 3 </ title >
    
< meta   http-equiv = " Content-Type "   content = " text/html; charset=iso-8859-1 "   />
    
< script   type = " text/javascript "   src = " swfobject.js " ></ script >
    
    
< script   type = " text/javascript " >
    swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0");
    
</ script >
 
  
</ head >
  
< body >
    
< div   id = " 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对象,例如这样:

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

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

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

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

< script   type = " text/javascript " >
 
var   flashvars  =  {} ;
flashvars . name1  =  " hello " ;
flashvars . name2  =  " world " ;
flashvars . name3  =  " foobar " ;
 
var   params  =  {} ;
params . menu  =  " false " ;
 
var   attributes  =  {} ;
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)):

< script   type = " 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或者一个空对象:

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

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

< script   type = " text/javascript " >
 
var   flashvars  =  false ;
var   params  =  {
  
menu " false " ,
  
flashvars " name1=hello&name2=world&name3=foobar "
} ;
var   attributes  =  {
  
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对象:

var   playerVersion  =  swfobject . getFlashPlayerVersion () // returns a JavaScript object
var   majorVersion  =  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,如需转载请自行联系原作者


相关文章
|
6月前
|
Kubernetes 云计算 Docker
【K8S系列】深入解析 k8s:入门指南(一)
【K8S系列】深入解析 k8s:入门指南(一)
87 0
|
6月前
|
Kubernetes API Docker
【K8S系列】深入解析 k8s:入门指南(二)
【K8S系列】深入解析 k8s:入门指南(二)
70 0
|
11月前
|
缓存 程序员 API
【翻译】阅读优秀的代码
【翻译】阅读优秀的代码
56 0
|
自然语言处理
好用翻译插件
好用翻译插件
好用翻译插件
|
机器学习/深度学习 大数据 算法框架/工具
GeeksForGeeks 翻译计划 | ApacheCN
版权声明:License CC BY-NC-SA 4.0 https://blog.csdn.net/wizardforcel/article/details/82730437 GeeksForGeeks 是计算机科学百科,涵盖了所有计算机科学核心课程。
|
API 数据格式 JSON
Solr快速入门文档阅读推荐——官方文档常用章节推荐
本文整理了Solr常见用法涉及的基础章节列表,通过这些章节的阅读学习,同学可以零基础快速入门使用Solr,并能够满足大部分企业的业务检索需求开发,掌握了熟悉使用Solr的基本技能。
1681 0
|
物联网 C# 索引
[翻译] C# 8.0 新特性
原文:[翻译] C# 8.0 新特性 原文: Building C# 8.0 [译注:原文主标题如此,但内容大部分为新特性介绍,所以意译标题为 "C# 8.0 新特性"] C# 的下一个主要版本是 8.0。
1235 0
|
前端开发 Java 测试技术
【翻译】- EffectiveAkka-第二章(一)
Actor使用模式   现在我们已经了解了可以创建的actor系统的不同类型,那么我们在编写基于actor的应用程序时,可以采用什么样的使用模式,以便避免出现常见错误呢? 下面就让我们看看其中使用模式。
1053 0
|
Android开发 Go 缓存
Gradle2.0用户指南翻译——第五章. 疑难解答
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2.0 。
1144 0

相关实验场景

更多