SWFObject是一个用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外,它能够避免您的HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。
(即:通过text/html应答页面, 而非application/xhtml+xml)
请注意: 由于法律原因,FlashObject已经更名为SWFObject,详见这里。
内容导读
新功能
详细的更新记录可以在SWFObject 1.5 blog post这里找到。
实现原理
SWFObject的使用是非常简单的,只需要包含 swfobject.js
这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入Flash媒体资源了。 下面是一个最简单的范例:
<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>
让我们看看这些代码是如何工作的
首先,我们要为SWF资源预留一个HTML结点。这个HTML结点内的所有内容都会在客户端被Flash资源替换,当客户端没有安装Flash播放器的时候,这些内容会显示出来。这一特色在SEO以及对用户体验方面非常有必要。
创建一个新的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”,后续有详细介绍
将Flash资源应用到DOM里,在浏览器显示出来。
细节
SWFObject 的灵活性非常好。您完全可以事先写好HTML的其他部分,最后再回过头来添加Flash内容。这样可以确保在客户端没有Flash的情况下,用户不会一无所获;也可以确保针对搜索引擎,做了什么样的关键词优化。您完全不用像以前那样担心客户端的各种状况
SWFObject兼容当前各种主流浏览器,如:PC上的IE5/5.5/6, Netscape 7/8,Firefox, Mozilla, and Opera。Mac上的IE5.2, Safari, Firefox, Netscape 6/7, Mozilla, and Opera 7.5+,各种浏览器的后续版本也会继续支持
SWFObject检测Flash播放器版本从3开始到最新的版本号,而且也消灭了IE中“激活”的麻烦。这里有相关背景。
SWFObject可以方便地检查版本细节,例如我们需要v.6.0 r65 (or 6,0,65,0) 来处理SWF资源,就可以添加如下代码:
SWFObject的版本检测可以人工忽略。如果在特定环境下您不希望SWFObject检测版本号,那么只需要传递一个参数在HTML页面中,就可以了。SWFObject可以捕获这个参数并且跳过检测,直接写入Flash嵌入代码到DOM中。用于忽略版本检测的变量名是“detectflash”,以下是一个例子:
SWFObject 范例
以上我们接触到的范例都最基础的,接下来我们列举一些其他功能,尤其是传入参数、变量这些使用频率较高的行为。
传入Flash内联参数的简单范例
var so = new SWFObject("movie.swf", "mymovie", "200", "100%", "7", "#336699");
so.addParam("quality", "low");
so.addParam("wmode", "transparent");
so.addParam("salign", "t");
so.write("flashcontent");
</script>
这里可以看到Flash支持的内联参数列表:full list of the current parameters and their possible values(adobe.com官方资源)
采用"Flashvars"参数传入变量
用Flashvars是在预加载Flash时传入数据的最佳做法,语法格式与GET变量串非常类似,如:variable1=value1&variable2=value2&variable3=value3
SWFObject帮助您将这项工作变得更加明确化
var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
so.addVariable("variable1", "value1");
so.addVariable("variable2", "value2");
so.addVariable("variable3", "value3");
so.write("flashcontent");
</script>
这些变量将会保存在_root
这个MovieClip对象里。
SWFObject还可以方便地直接从URL中接受参数传入Flash中,例如你有这样一个URL:http://www.example.com/page.html?variable1=value1&variable2=value2
。采用getQueryParamValue()
方法你就可以轻松获取这些参数,并将它们传入Flash,例如:
var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
so.addVariable("variable1", getQueryParamValue("variable1"));
so.addVariable("variable2", getQueryParamValue("variable2"));
so.write("flashcontent");
</script>
getQueryParamValue()
方法同样可以获取JavaScript的Location对象的hash值“location.hash
”来与swf内部进行通信。这里是一个采用SWFObject的应用程序,其中用到了location.hash
对象:链接地址
在SWFObject中应用Express Install(利用官方自动升级接口)
SWFObject全面支持AdobeFlash播放器的自动升级功能(从6.0.65起的FlashPlayer支持在swf内部自动升级!),这样用户完全不用离开您的网页就能完成播放器的升级了。
首先,上传官方的expressinstall.swf到您的服务器上,然后使用useExpressInstall
方法指定这个swf文件的地址就可以了,例如:
var so = new SWFObject("movie.swf", "mymovie", "200", "100", "8", "#336699");
so.useExpressInstall('expressinstall.swf');
so.write("flashcontent");
</script>
您可以安装一个低版本的Flash播放器然后访问这个页面看到效果
在SWFObject原文件压缩包中您可以找到具体的使用细节,您可以自己定制ExpressInstall的流程。
如果您的Flash影片在弹出窗口中,或者您希望用户在完成了ExpressInstall后重定向到其他地址,你可以采用xiRedirectUrl
属性,来自动完成这一步骤。例如:
var so = new SWFObject("movie.swf", "mymovie", "200", "100", "8", "#336699");
so.useExpressInstall('expressinstall.swf');
so.setAttribute('xiRedirectUrl', 'http://www.example.com/upgradefinished.html'); // must be the absolute URL to your site
so.write("flashcontent");
</script>
下载
SWFObject基于MIT License,您可以免费任意使用。
下载 SWFObject 1.5 - Zip 文件, 包含 swfobject.js 和其他范例。
更多链接:
- 标准Flash嵌入 - 符合XHTML 1.0 Strict.*
- 全屏Flash嵌入 - 符合XHTML 1.0 Strict.*
- 含Express Install的标准Flash嵌入 - 从6.0.65起的FlashPlayer才支持此功能
* 页面全部是 text/html格式,不是 application/xhtml+xml.
更多问题可以访问我们的论坛:SWFObject论坛!
独特优势
多年以来,各种各样的Flash播放器版本检测代码层出不穷,包括嵌入脚本也有许多。我们在这一部分针对流行的几种方法进行一个比较。
1) Adobe官方做法
这就是经典的Object标签和Embed标签配合做法,也是目前最常用的做法:
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"
width="550" height="400" id="Untitled-1" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="mymovie.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="mymovie.swf" quality="high" bgcolor="#ffffff" width="550"
height="400" name="mymovie" align="middle" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
</object>
虽然是目前最常用的方法,但仍然有一些问题。
- 缺乏播放器版本检测 没有播放器插件版本检测,用户会获得非常糟糕的体验,他们会在不知情的情况下看到ActiveX插件安装入口,这样会导致大部分用户离开。而且,用低版本播放器播放高版本的swf文件,会导致更多潜在问题,而用户会将一切问题归咎于您的产品
- Eolas专利纠纷导致IE的近期发行版中需要进行一次“激活”点击才可以完成和Flash内容的交互。详细内容
- 不符合XHTML规范 - 在HTML和XHTML中都没有
embed
标签HTML or XHTML。因为object
标签在不同浏览器中的诡异表现,我们不得不用embed标签来完善最终效果。
2) 仅采用Object标签 / Flash satay
这种方法在2002年的A List Apart article出现之后开始大面积流行,这里有两个例子:
'仅含Object标签'
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"
width="300" height="120">
<param name="movie" value="http://www.macromedia.com/shockwave/download/triggerpages_mmcom/flash.swf">
<param name="quality" value="high">
<param name="bgcolor" value="#FFFFFF">
<!--[if !IE]> <-->
<object data="http://www.macromedia.com/shockwave/download/triggerpages_mmcom/flash.swf"
width="300" height="120" type="application/x-shockwave-flash">
<param name="quality" value="high">
<param name="bgcolor" value="#FFFFFF">
<param name="pluginurl" value="http://www.adobe.com/go/getflashplayer">
FAIL (the browser should render some flash content, not this).
</object>
<!--> <![endif]-->
</object>
Flash satay
data="c.swf?path=movie.swf"
width="400" height="300">
<param name="movie"
value="c.swf?path=movie.swf" />
<img src="noflash.gif"
width="200" height="100" alt="" />
</object>
- 可用性问题 - 采用 Flash Satay 的话, 一些屏幕阅读器会忽略swf内容.
- Eolas专利纠纷导致IE的近期发行版中需要进行一次“激活”点击才可以完成和Flash内容的交互。详细内容
- 缺乏播放器版本检测 没有播放器插件版本检测,用户会获得非常糟糕的体验,他们会在不知情的情况下看到ActiveX插件安装入口,这样会导致大部分用户离开。而且,用低版本播放器播放高版本的swf文件,会导致更多潜在问题,而用户会将一切问题归咎于您的产品
- 早期的的Safari会忽略
param
标签 - 在这些版本:2.0 (Tiger) 或者 1.3 (Panther) 或者可能 1.2.8 (前Panther) 之前,Safari 完全忽略param
标签。这将会让你的Flashvars等参数无法传入。
3) 'small flash movie on the index page' 检测方法
这个方法会通过在首页放一个swf文件去访问$version
变量来返回版本信息。
问题在于:
- 内页无检测 - 内页如果不放着这个swf就无法检测
- “激活”问题
- 不符合HTML或者XHTML规范
- 影响搜索引擎索引排名
4) Adobe官方 Flash Player Detection 模块
Adobe官方这个模块非常不错,然而仍然有一些不足,它采用两种方法来检测
- Flash自身检测,如上面提到的"small Flash movie on the index page" - 缺点已经提过了
- Javascript - 混乱的代码让你的HTML变得非常难以维护
深入讨论在这里。
5) 用纯粹的JS来检测、嵌入
这种方法看起来不错,但是仍然缺乏规范,而且消耗开发成本
- 检测不够完善 - 通常只能检测到当前的Flash播放器发行版,而且升级也需要手工参与
- 增加了 更多 代码 - 难以维护的DOM结构
- 解决方案太笨重 - SWFObject进行了多次优化,非常轻量
相关推荐
SWFObject是一个JavaScript库,主要用于在网页中检测和嵌入Adobe Flash媒体资源,特别是SWF文件。这个模块的核心功能是通过JavaScript脚本来检测用户的浏览器是否安装了足够版本的Flash插件,以支持播放指定的Flash...
本主题聚焦于一个特定的JavaScript模块——"基于JavaScript的Flash媒体版本检测与嵌入模块",这个模块主要用于处理网页中的Flash内容,确保用户能够正确地查看和交互。 Flash曾是网页多媒体内容的主流技术,但在...
2. **swfobject库**:swfobject是一个轻量级的JavaScript库,它的主要任务是检测用户浏览器中的Flash Player版本,并根据检测结果进行相应的处理。库的大小小意味着加载速度快,对网页性能影响小。 3. **版本检测**...
SWFObject 是一个流行的开源 JavaScript 库,用于检测浏览器是否支持 Flash,并在支持的情况下插入相应的 Flash 对象。在 AngularJS 的上下文中,nb-swfobject 提供了与 Angular 服务、指令和数据绑定相集成的功能。...
`SWFObject`能够检测用户是否已经安装了支持的Flash版本,如果支持,就会在页面中插入Flash内容;如果不支持,则可以提供备选的HTML5内容。插入Flash后,通过`ExternalInterface`接口,JavaScript可以与Flash Player...
在实际开发中,有一些工具可以帮助简化JSP与Flash的集成,如SWFObject,这是一个轻量级的JavaScript库,用于插入和检测Flash内容。它提供了良好的浏览器兼容性和优雅降级功能,确保即使用户没有安装Flash插件,页面...
5. **swfobject.js**:这是一个用于检测和嵌入Flash的JavaScript库,由于我们要移除Flash,这个文件在H5上传方案中不再需要。 6. **formvalidator.js**:这可能是用于表单验证的脚本,确保用户上传的文件符合预设的...
SWFObject是一个轻量级的JavaScript库,可用来检测浏览器的Flash Player版本并嵌入SWF文件。Flex SDK则提供了更全面的开发工具,包括ActionScript编译器和Flex框架。 2. **Flash API的调用**:C++Builder与Flash的...
SWFObject是用于嵌入Flash内容的JavaScript工具,它使得在网页中无缝集成Flash元素变得简单。在婚介系统中,Flash可能用于创建引人注目的动画、展示会员资料或者提供互动的游戏或测试,增加网站的吸引力和娱乐性。 ...
"Flash新闻图片切换源码"是指一种基于Adobe Flash技术的代码实现,用于在网页上创建一个动态的新闻图片展示模块。这个模块能够自动切换展示的图片,并且用户可以自定义图片的来源、标题、链接、背景色以及显示时间等...
- **SWFObject**:这是一种JavaScript库,能够帮助实现跨浏览器的SWF文件嵌入,同时提供检测Flash Player版本的功能,确保用户可以正常查看内容。 - **Flex的HTML嵌入代码生成器**:Flex SDK提供了一个名为`mxmlc`...
2. **Flash与Java的交互**:利用ExternalInterface或Flash Player插件与JavaScript进行通信,从而与Java后端进行数据交换,实现富互联网应用(RIA)的功能。 3. **Flash ActionScript与Java API**:可能需要了解如何...
22. **SWFObject**: Adobe认可的用于嵌入Flash的JavaScript库,兼容性优秀。 23. **ulse Particle System**: 强大的AS3动态粒子系统,用于创建各种特效。 24. **SpringGraph Flex Component**: 用于绘制弹簧网络图...
6. **swfobject.js** 和 **swffit.js**:JavaScript库,用于在网页中嵌入和管理Flash对象,如自动检测Flash插件版本、填充容器等。 7. **系统使用说明.txt**:包含如何安装、配置和使用这套网站源码的详细步骤和...
6. `swfobject.js` - 一个JavaScript库,用于检测和嵌入SWF(Flash)文件,确保在不支持HTML5的旧浏览器中也能运行。 7. `uploadify.php` - PHP脚本,处理从客户端发送的文件上传请求,可能包括验证文件类型、大小等...
该资源是一个基于jQuery库实现的下拉弹出广告特效源码,主要特点是可以展示文字、图片甚至是Flash内容,并且带有关闭按钮,适用于创建吸引用户注意力的对联广告。以下是对这个源码中涉及的关键知识点的详细说明: 1...
4. "swfobject.js":这是一个JavaScript库,通常用于在网页中动态插入和控制Flash内容,这里用于加载"Sapload.swf"文件。 5. "sapload.swf":这是Sapload组件的Flash文件,负责与用户的交互和实际的文件上传操作。 6...
jQuery与Flash的交互(query_flash)通常涉及到SWFObject库,它可以用来检测Flash插件的存在并嵌入Flash内容。结合jQuery,可以实现Flash对象的动态加载、替换或控制Flash中的某些功能。 总结,这75款jQuery特效...
7. **SWFObject** - 用于在网页中嵌入Flash内容的JavaScript库。 8. **Yahoo! User Interface Library (YUI)** - Yahoo开发的一套开源的前端开发工具,包括CSS样式、JavaScript库和各种组件。 **使用Google API ...
SwfObject是一个JavaScript库,主要用于在网页中无缝插入和控制Flash内容。它在早期Web开发中非常流行,但现在随着HTML5的普及,使用场景已相对较少。不过,学习SwfObject的原理和用法可以帮助开发者了解过去的技术...