4月24日 翻译:farthinker

主要内容:

  • 1 . 什么是SWFObject 2.0?
  • 2 . 为什么你应该使用SWFObject 2.0?
  • 3 . 为什么SWFObject 2.0使用JavaScript?
  • 4 . 我们应该使用静态发表还是动态发表的方法?
  • 5 . 怎样用SWFObject 2.0的静态发表方法来嵌入Flash内容
    • 5-1 . 第一步:用符合标准的标签同时嵌入Flash内容和替换内容
    • 5-2 . 第二步:在HTML的head标签中包括SWFObject的JavaScript类库
    • 5-3 . 第三步:用SWFObject类库注册你的Flash内容并告诉SWFObject怎么样处理这些内容
  • 6 . 怎样用SWFObject 2.0的动态发表方法来嵌入Flash内容?
    • 6-1 . 第一步:用符合标准的标签创建替换内容
    • 6-2 . 第二步:在HTML页面的head标签中包括SWFObject JavaScript类库
    • 6-3 . 第三步:用JavaScript嵌入你的SWF
  • 7 . 从SWFObject 1.5迁移到SWFObject 2.0的注意事项
  • 8 . 从UFO迁移到SWFObject v2.0的注意事项
  • 9 . SWFObject支持MIME类型application/xhtml+xml吗?
  • 10 . 评论政策

1 . 什么是SWFObject 2.0?

SWFObject 2.0:

  • 提供两种优化的嵌入Flash Player的方法:一种基于标签的方法和一种依赖于JavaScript的方法。
  • 提供一套JavaScript API,目的是提供一套完整的工具来嵌入SWF文件和获得Flash Player的相关信息。[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_api_javascript_dev ]
  • 只利用一个很小的JavaScript文件(size: 8.7Kb, GZIPed: 3.4Kb)。
  • 是SWFObject 1.5[ http://blog.deconcept.com/swfobject/ ]和UFO [ http://www.bobbyvandersluis.com/ufo/ ]的继承者。
  • 将最终替代Adobe Flash Player Detection Kit [ http://www.adobe.com/products/flashplayer/download/detection_kit/ ]。
  • 准备整合所有已存在的Flash Player嵌入方法,并且为嵌入Adobe Flash Player内容提供一个新的标准。
  • 是一个由Geoff Stearns、 Michael Williams和 Bobby van der Sluis创建的开源项目,前身是SWFFix [ http://code.google.com/p/swffix/ ]。

回到页首

2 . 为什么你应该使用SWFObject 2.0?

SWFObject 2.0:

  • 比任何其他的Flash Player嵌入方法更完善更灵活。
  • 为每个人都提供了一种解决方案:无论你是一个HTML、Flash或者JavaScript开发者,你都能从中发现适合你的东西。
  • 打破了使用浏览器专有标签的恶性循环,促进了web标准和替换内容(译者注:alternative content,指Flash内容无法正常显示时需要显示的内容,使用替换内容通常是因为Flash插件没有安装或者Flash插件版本过低)的使用。
  • 采用分离式的(unobtrusive)JavaScript和最合理的JavaScript实践。
  • 容易使用。

一篇A List Apart上的文章Flash Embedding Cage Match描述了SWFObject 2.0背后的所有原理。

回到页首

3 . 为什么SWFObject 2.0使用JavaScript?

SWFObject 2.0主要使用JavaScript来解决一些仅依靠标签无法解决的问题;它:

  • 通过探测Flash Player的版本,来决定显示Flash内容还是替换内容,避免了过时的Flash插件影响Flash内容的正常显示。
  • 提供了恢复到替换内容的功能:当Flash内容因为过时的Flash Player而无法正常显示时,SWFObject通过DOM操作用替换内容代替Flash内容。(注意:如果Flash Player没有被安装,HTML object元素会自动被替换内容所替代。)
  • 提供了一个选择来使用Adobe Express Install下载最新版本的Flash Player。
  • 通过使用专有的embed元素的办法,解决了老版的Webkit引擎会忽略嵌套在object元素中的param元素的问题。(注意:这是唯一一个使用了专有HTML标签的地方,并且在今后的版本中会被逐步淘汰。)
  • 提供了一个详尽的JavaScript API来完成一些常见的与Flash Player和Flash内容相关的操作。

回到页首

4 . 我们应该使用静态发表还是动态发表的方法?

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

  1. 静态发表方法用符合标准的标签来嵌入Flash内容和替换内容,并且用JavaScript来解决一些仅依靠标签无法解决的问题。
  2. 动态发表方法基于用标准标签插入替换内容,如果浏览器安装了最低版本需求的Flash插件并且拥有足够的JavaScript支持,SWFObject会用JavaScript将替换内容替换成Flash内容(与以前版本的SWFObject以及UFO很相似)。

静态发表方法的优势在于:

  1. 促进了对符合标准标签的创作。(译者注:不太理解,原文是:The actual authoring of standards compliant markup is promoted.)
  2. 插入Flash内容的机制不再依赖于JavaScript,所以你的Flash内容能有更多的受众。
    • 如果你安装了Flash插件,但是JavaScript被禁用了或者浏览器并不支持JavaScript,你仍然能够看到你的Flash内容。
    • Flash将能够在那些对JavaScript支持较弱的设备上运行,例如Sony PSP。
    • 像RSS阅读器这样的自动化的工具能够读取Flash内容。

动态发表方法的优势在于:

  1. 它避免了通过点击激活的机制来激活Internet Explorer 6/7和Opera 9+中的Flash内容。值得注意的是微软正在逐步淘汰IE中的点击激活机制[ http://www.swffix.org/devblog/?p=19 ]。(译者注:Internet Explorer 6/7的点击激活机制已经在2008/4的更新中被移除)
  2. 它能很好的与基于脚本的应用整合。

回到页首

5 . 怎样用SWFObject 2.0的静态发表方法来嵌入Flash内容?

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

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

view plain copy to clipboard print ?
  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 v2.0 - step 1</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. </head>
  7. <body>
  8. <div>
  9. <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">
  10. <param name="movie" value="myContent.swf" />
  11. <!--[if !IE]>-->
  12. <object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
  13. <!--<![endif]-->
  14. <p>Alternative content</p>
  15. <!--[if !IE]>-->
  16. </object>
  17. <!--<![endif]-->
  18. </object>
  19. </div>
  20. </body>
  21. </html>
<!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元素。

必须的属性:

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

必须的param元素:

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

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

怎样使用HTML来配置你的Flash内容?

你可以为你的object元素添加下面这些常用的可选属性[ 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
  • flashvars
  • 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插件获得更好的用户体验,你就应该使用替换内容。

回到页首

5-2 . 第二步:在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事件被触发后执行。

view plain copy to clipboard print ?
  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 v2.0 - step 2</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. <script type="text/javascript" src="swfobject.js"></script>
  7. </head>
  8. <body>
  9. <div>
  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. </div>
  21. </body>
  22. </html>
<!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>

回到页首

5-3 . 第三步:用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体验。需要注意的是,express install只会被触发一次(它第一次被调用时),只被Win或Mac平台上的Flash Player 6.0.65或更高的版本所支持,并且它要求SWF的最小尺寸为310*137 px。

view plain copy to clipboard print ?
  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 v2.0 - step 3</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. <script type="text/javascript" src="swfobject.js"></script>
  7. <script type="text/javascript">
  8. swfobject.registerObject("myId", "9.0.0", "expressInstall.swf");
  9. </script>
  10. </head>
  11. <body>
  12. <div>
  13. <object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">
  14. <param name="movie" value="myContent.swf" />
  15. <!--[if !IE]>-->
  16. <object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
  17. <!--<![endif]-->
  18. <p>Alternative content</p>
  19. <!--[if !IE]>-->
  20. </object>
  21. <!--<![endif]-->
  22. </object>
  23. </div>
  24. </body>
  25. </html>
<!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文件。
  • 获得object元素引用最简单的方法是使用JavaScript API:swfobject.getObjectById(objectIdStr) [ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_api_javascript_dev ]

回到页首

6 . 怎样用SWFObject 2.0的动态发表方法来嵌入Flash内容?

6-1 . 第一步:用符合标准的标签创建替换内容

SWFObject的动态嵌入方法遵循渐进增强(progressive enhancement)[ http://www.adobe.com/devnet/flash/articles/progressive_enhancement.html ]的原则,当浏览器对JavaScript和Flash插件有足够支持的时候,SWFObject会用Flash内容替换HTML内容。首先定义你的替换内容,并且为它添加一个id属性:

view plain copy to clipboard print ?
  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 v2.0 dynamic embed - step 1</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. </head>
  7. <body>
  8. <div id="myContent">
  9. <p>Alternative content</p>
  10. </div>
  11. </body>
  12. </html>
<!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>

回到页首

6-2 . 第二步:在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事件被触发后执行。

view plain copy to clipboard print ?
  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 v2.0 dynamic embed - step 2</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. <script type="text/javascript" src="swfobject.js"></script>
  7. </head>
  8. <body>
  9. <div id="myContent">
  10. <p>Alternative content</p>
  11. </div>
  12. </body>
  13. </html>
<!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>

回到页首

6-3 . 第三步:用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的属性。

注意:在不破坏参数顺序的情况下,你可以忽略可选参数。如果你不想使用一个可选参数,但是会使用后面的一个可选参数,你可以简单的传入false作为参数的值。对flashvars、 params和 attributes这些JavaScript对象来说,你也可以相应的传入一个空对象{}。

view plain copy to clipboard print ?
  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 v2.0 dynamic embed - step 3</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. <script type="text/javascript" src="swfobject.js"></script>
  7. <script type="text/javascript">
  8. swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0");
  9. </script>
  10. </head>
  11. <body>
  12. <div id="myContent">
  13. <p>Alternative content</p>
  14. </div>
  15. </body>
  16. </html>
<!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的保留关键字)s
  • align

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

  • play
  • loop
  • menu
  • quality
  • scale
  • salign
  • wmode
  • bgcolor
  • base
  • swliveconnect
  • flashvars
  • 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对象,例如这样:

view plain copy to clipboard print ?
  1. <script type="text/javascript">
  2. var flashvars = {};
  3. var params = {};
  4. var attributes = {};
  5. swfobject.embedSWF("myContent.swf""myContent""300""120""9.0.0","expressInstall.swf", flashvars, params, attributes);
  6. </script>
<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对后面加上逗号):

view plain copy to clipboard print ?
  1. <script type="text/javascript">
  2. var flashvars = {
  3. name1: "hello",
  4. name2: "world",
  5. name3: "foobar"
  6. };
  7. var params = {
  8. menu: "false"
  9. };
  10. var attributes = {
  11. id: "myDynamicContent",
  12. name: "myDynamicContent"
  13. };
  14. swfobject.embedSWF("myContent.swf""myContent""300""120""9.0.0","expressInstall.swf", flashvars, params, attributes);
  15. </script>
<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)和值:

view plain copy to clipboard print ?
  1. <script type="text/javascript">
  2. var flashvars = {};
  3. flashvars.name1 = "hello";
  4. flashvars.name2 = "world";
  5. flashvars.name3 = "foobar";
  6. var params = {};
  7. params.menu = "false";
  8. var attributes = {};
  9. attributes.id = "myDynamicContent";
  10. attributes.name = "myDynamicContent";
  11. swfobject.embedSWF("myContent.swf""myContent""300""120""9.0.0","expressInstall.swf", flashvars, params, attributes);
  12. </script>
<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>

上面的代码也可以这样写(为那些喜欢单行代码的顽固脚本程序员准备的不易读的简写版本):

view plain copy to clipboard print ?
  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>
<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或者一个空对象:

view plain copy to clipboard print ?
  1. <script type="text/javascript">
  2. var flashvars = false;
  3. var params = {};
  4. var attributes = {
  5. id: "myDynamicContent",
  6. name: "myDynamicContent"
  7. };
  8. swfobject.embedSWF("myContent.swf""myContent""300""120""9.0.0","expressInstall.swf", flashvars, params, attributes);
  9. </script>
<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:

view plain copy to clipboard print ?
  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>
<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文件。

回到页首

7 . 从SWFObject 1.5迁移到SWFObject 2.0的注意事项

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

回到页首

8 . 从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)。

回到页首

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

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

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

  • 只有很少一部分(并不重要)web开发者使用它。
  • 我们不确定那是否今后的发展方向。Internet Explorer并不支持它,而其他主流的浏览器将它们的目标定在了一种新的HTML解析标准(以及HTML 5),而这将偏离目前W3C所提倡的将HTML解析为XML。
  • 考虑到节省文件大小,以及时间、精力的限制(主要在测试和解决疑难问题方面),我们不提供对它的支持。

回到页首

10 . 评论政策

我们会尽可能保持这个页面的苗条和简洁,因为它会被很多人使用。出于这样的目的,我们会定期检查所有的评论,并移除所有过时的或者与本文档无关的评论。 如果你对SWFObject 2.0有任何问题、意见或者在使用时遇到困难:

  1. 请确定你已经阅读了我们的FAQ [ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_faq_web_authors ]。
  2. 使用SWFObject 2.0讨论组[ http://groups.google.com/group/swfobject ]。 如果你发现任何bug或者有更多功能上的需求,你可以在SWFObject 2.0问题提交页面[ http://code.google.com/p/swfobject/issues/list ]填写一份问题报告。

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的使用说明

    SWFObject 2.0的使用说明 2009-05-23 13:24 <div id="myContent"> <p>Alternative conten ...

  3. swfobject.js for flash 的使用(for swfobject 2.0)

    如何判断flash的版本 var flashVersion = swfobject.getFlashPlayerVersion();var flash_file = "vchat.swf&q ...

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

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

  5. swfobject.embedSWF属性与用法

    swfobject.embedSWF属性与用法 2010-06-29 09:47/点击数( 2218) swfobject.embedSWF(swfUrl, id, width, height, ve ...

  6. 估算带卷积核二分类0,3的网络的收敛时间和迭代次数

    制作一个网络分类minst的0和3求出这网络的迭代次数曲线表达式n(δ),和准确率表达式p-max(δ),用预期准确率去估算n,并推算需要的时间. 将minst的28*28的图片缩小到9*9,网络用一 ...

  7. 用JavaScript嵌入你的SWF

    用JavaScript嵌入你的SWF swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flas ...

  8. flex3 接受外部参数

    1.一般状况 html: <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase=&quo ...

  9. java w3c dom api_org.w3c.dom 中文api

    关于XML字符串和XML Document之间的转换 在web项目中,XML作为一种重要的数据存储和传输介质,被广泛使用.XML文件,XML字符串和XML Document对象是XML存在的三种形式, ...

最新文章

  1. 《Flask 入门教程》第 6 章:模板优化
  2. 残差网络(ResNet)
  3. 2016年10个重要的可视化发展
  4. 下周见!Redmi K50标准版配置细节曝光:骁龙870+67W快充
  5. tc.html是什么页面,HTML iframe属性详细说明
  6. 在dos下的文件及文件夹操作命令
  7. CSS基础——CSS复合选择器【学习笔记】
  8. CS231n-Numpy入门
  9. 接口测试基础——第6篇unittest模块(三)
  10. atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx
  11. FastDFS分布式架构,详细安装步骤,测试;Nginx中配置FastDFS,并提供优化,下载方法,楼主已测
  12. 7-3 作业调度算法--高响应比优先
  13. [BZOJ3653]谈笑风生 主席树
  14. 距离度量与相似度度量
  15. [译] 超快速的分析器(一):优化扫描器
  16. 微信H5页面禁止分享朋友和复制链接
  17. 什么是好的数据分析?化繁为简的力量
  18. 集成seata到springboot,cloud项目,找不到事务分组
  19. element ui中的el-input回车键事件
  20. this.$refs 获取不到解决办法

热门文章

  1. 常用的端口号有哪些?
  2. xnio-nio解决方法
  3. iptable 笔记
  4. Linux下R环境安装
  5. 算法设计(Jon Kleinberg等著) 笔记 1. 一些算法问题
  6. 网络同步与异步概念整理
  7. 记录Guava版本冲突而出现项目启动失败的问题
  8. 哑变量或虚拟变量介绍(dummyvar)
  9. MeEdu开源网校系统-手动安装教程(完整版)
  10. vt100 c语言控制,【转】C语言中控制printf的打印颜色实例及vt100的控制符文档