如何使用swfobject

JavaScript019

如何使用swfobject,第1张

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插件安装,但已禁用JavaScript或使用的浏览器不支持JavaScript,您将仍然能够看到你的Flash内容

flash可以运行在对js支持非常糟糕的设备上,比如sony的psp。

RSS阅读器等自动化工具能够抓到Flash内容

促进实际制作符合标准的标记

最佳嵌入性能

嵌入Flash内容的机制,不依赖于脚本语言,所以flash内容可以被更多的人看到(兼容性更好)

动态发布的优势:

它与脚本的应用程序很好地集成在一起,能够使动态变量(flashvars)

它避免了点击激活机制激活活动内容在Internet Explorer6/7和Opera9+。请注意,微软已经淘汰了其Internet Explorer浏览器的最活跃的内容

5.如何使用SWFObject的静态方法嵌入Flash Player内容?

步骤1:使用符合标准的标记嵌入Flash内容和替代内容

SWFObject的基础标记使用嵌套对象的方法(用专有的IE条件注释),确保仅标记手段的最优化跨浏览器支持,而作为符合标准和配套的替代内容。

最近看到了好几个Flash网站,head代码里都加载了一个swfobject.js,这个JS究 竟有什么作用呢?眼下正在做一个Web页面,说不定刚好可以派上用场。于是,好奇的搜索了一下。原来这是老外开发的,用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块,该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种 主流浏览器对Flash插件的支持情况。目前最新的版本是2.2,这里可以下载最新版的SWFObject:

http://code.google.com/p/swfobject/

发现用它的好处多多啊:

1.IE中没有讨厌的虚框问题了。

2.提供了完善的版本检测功能,如果版本不够则显示其他东西,比如图片或文字。

3.易于使用,只要在页面头加载一个 .js 文件,然后 HTML 写一个容器,里面放普通的文本或图片(用于无法显示 Flash 时显示),最后用脚本来替换这个元素里面的内容为 Flash。

4.使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。

5.能够避免HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。

只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入Flash媒体资源了。下面是一个最简单的范例:

<script type="text/javascript" src="swfobject.js"></script>

<div id="flashcontent">

This text is replaced by the Flash movie.

</div>

<script type="text/javascript">

var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699")

so.write("flashcontent")

</script>让我们看看这些代码是如何工作的

<div id="flashcontent">[...]</div>首先,我们要为SWF资源预留一个HTML结点。这个HTML结点内的所有内容都会在客户端被Flash资源替换,当客户端没有安装Flash播放器的时候,这些内容会显示出来。这一特色在SEO以及对用户体验方面非常有必 要。

var so = new SWFObject(swf, id, width, height, version, background-color [, quality, xiRedirectUrl, redirectUrl, detectKey])创建一个新的SWFObject实例,并且传入一下参数:

swf - SWF文件路径

id - 您为这个SWF文件分配的id值,它将用于给embed与object标签设定name属性,以便于可以支持swliveconnect的功能,如动态传 入变量

width - 宽度

height - 高度

version - FlashPlayer需要的版本号,它可以详细到 '主版本号.小版本号.细节',例如:"6.0.65"。一般地,我们只需传入主版本即可,例如:"6"。

background-color - Flash资源的背景色,16进制格式

此外,还有如下可选参数:

quality - 画面质量,默认为"high"。

xiRedirectUrl - 详见ExpressInstall相关

redirectUrl - 没有安装相应版本的播放器后自动跳转的目标地址

detectKey - 这是当忽略检测时,SWFObject将去url地址中查找的变量,默认值为“detectflash”,后续有详细介绍

so.write("flashcontent")将Flash资源应用到DOM里,在浏览器显示出来。

SWFObject在

<script type="text/javascript">

</script>

之间加入多个参数来实现各个效果,参数很多,但是实际只要一点点。我们可以看下这样的代码:

<script type="text/javascript" src="swfobject.js"></script>

<script type="text/javascript">

var so = new SWFObject("movie.swf", "mymovie", "400", "100%", "8", "#336699")

so.addParam("quality", "low")

so.addParam("wmode", "transparent")

so.addParam("salign", "t")

so.addVariable("variable1", "value1")

so.addVariable("variable2", "value2")

so.addVariable("variable3", "value3")

so.addVariable("variable1", getQueryParamValue("variable1"))

so.addVariable("variable2", getQueryParamValue("variable2"))

so.write("flashcontent")

</script>

这段代码给出了SWFObject的常用参数:

var so = new SWFObject(swf, id, width, height, version, background-color [, quality, xiRedirectUrl, redirectUrl, detectKey])

so.addParam("Param1", "Param2")

so.addParam("Param3", "Param4")

so.addParam("Param5", "Param6")

so.addVariable("variable1", "value1")

so.addVariable("variable2", "value2")

so.addVariable("variable3", "value3")

so.addVariable("variable1", getQueryParamValue("variable1"))

so.addVariable("variable2", getQueryParamValue("variable2"))

so.write("content")

解释一下这些参数的作用:

var so = new SWFObject(swf, id, width, height, version, background-color [, quality, xiRedirectUrl, redirectUrl, detectKey])//这段是SWFObject必须的基本参数,所有SWFObject都必须包含的。

so.addParam("Param1", "Param2") //这里是给Flash添加内联参数,可以实现诸如背景透明之类的效果。依照需求添加就可以了,参数和emded/object标签是一样的代码,下同。

so.addParam("Param3", "Param4")

so.addParam("Param5", "Param6")

so.addVariable("variable1", "value1") //这里是给Flash添加FlashVar,这是以FlashVar的方式给Flash的Root添加变量,对于Number型变量在Flash端需要 做类型转换。

so.addVariable("variable2", "value2")

so.addVariable("variable3", "value3")

so.addVariable("variable1", getQueryParamValue("variable1")) //Flash获取URL变量对于url?arg1=test1&arg2=test2这样用GET方式传递变量的URL,我们可以用 getQueryParamValue方法来获取变量。

so.addVariable("variable2", getQueryParamValue("variable2"))

so.write("content") //这里是至关重要的一个地方,他是用一段特定内容取代Flash无法显示时的内容。可以事先在CSS里定义好样式,在文档里使用div标签写出来。这里 在调用过来。

(转)