|
网页中嵌入flash的最佳方案
来源:
互联网
日期:2009-2-20
|
|
|
|
|
我们针对各种网店的需求,提供具有专业针对性的智能网店。集易用性和强大功能为一体,支持静态HTML生成和搜索优化、个性化模版定制、强大的网店管理系统和各种专业网店功能...点此申请
|
|
|
|
|
|
智能建站已经成为企业网站建设的主要方式,建立个性化企业网站是企业品牌形象的体现;具有强大灵活的网站功能、HTML生成、搜索引擎优化,现有简体、繁体、英文、日文等多国语言可选用。赶快申请,立即拥有个性化企业网站... |
|
|
|
|
|
三语易站是国内受众最广泛的傻瓜式自助建站系统。只要会打字就可以建站,支持简繁英三语,简繁自动转换;具有单页、文章、图文、下载等网站内容管理功能,自定义栏目内容设置,管理系统简单易用,适合企业个人自助创建和管理网站...点此申请
|
|
|
|
|
Flash Satay
另外还有个选择是Flash Satay方法,它用了传统的object方式,并且增加了额外的movie param来避免IE中不显示的bug。它还包括了一个容器flash来处理IE流加载bug。
<object type="application/x-shockwave-flash" » data="c.swf? path=myContent.swf" width="300" height="120"> <param name="movie" value="c.swf?path= » myContent.swf" /> <p>Alternative content</p> </object>
虽然它很接近“理想的”object实现,但Flash Satay包含了一个使它的结构无法普适的权宜方案,并且它还不支持老Safari中的嵌套param。
DOM脚本的方案
在考虑纯标签方式的时候,也许你已经在想,为什么我们不用DOM脚本来替代呢。通过脚本,我们可以为每个浏览器提供所需的标签:
* IE专用的object标签 * 老版本的safari用的embed标签 * 所有其他的浏览器用的普通object
DOM 脚本也具有足够灵活性来解决我们的其他问题:初始化的时候,我们可以用它来解决flash内容和播放器不匹配的问题。只需要对每个flash逐一检测插件 版本,并决定显示Flash还是显示替换内容。当需要的插件版本不足的时候,我们可以触发Adobe快速安装,一种可以在flash播放器内部下载安装控 件的简单机制。
DOM方案也让我们以动态写入的方式避免了点击激活机制。
用Javascript的时候要考虑的事情
因为不是每个人都是javascript专家——即使是专家,也没有必要重新去发明轮子——去用已有的javascript库嵌入flash是很明智的。让我们考虑一下选择一个值得信任的库所依据的原则。
写库的人通常都不考虑遵循标准,因为这些库要么在javascript里面生成flash内容,要么在开发工具里面帮你做这个工作,大多数库生产的都是不标准的代码,而且由于是动态生成的,W3C验证器也没法检查你的标签。
另外要考虑的是,当javascript被禁用,不支持,或者不被完全支持的时候,能否做到良好的退化。为了帮一小部分人提升用户体验而采用javascript,结果却弄得另一小部分人没法体验了,这样做的意义在哪里?
带着这些问题,我们来看看现在流行的库能做到多好。
Adobe Flash player detection kit
除了在flash IDE里面生成标签代码以外,Adobe还提供了Flash播放器侦测套件。使用这个套件有三种方法:
1. 在flash8 IDE中勾上检测flash版本的多选框(在文件>发布设置>HTML)。 2. 下载侦测套件zip,然后手动加入。 3. 用Flex Builder2发布,默认就带。
虽然侦测套件包含了我们想要的所有特性,像版本检测,快速安装,自动激活,但它仍然有改进的空间。如果考虑遵循标准的话,它就显然失败了:它仍 然基于两次烹调法,所以它要么生成微软的独门object,要么生成通用的不标准embed。它也支持替换内容但是以一种古怪的不统一的方式。你需要两次定义你的替换内容:在javascript里和在一个noscript标签里。然而一方面Flash IDE和侦测套件把设置替换内容的工作流给你,另一方面Flex Builder 2却默认会把整个两次烹调代码贴在noscript标签里面,用以在不支持javascript或者禁用了javascript的时候显示flash。 总的来说,侦测套件在如何选择正确退化或者使flash内容对搜索引擎友好可访问这一点上,缺乏一种良好的策略和可以自圆其说的最佳方法。而且如果你需要自定义的话,它也并不是最简单的解决方法。
UFO和SWFObject
流行的开源替代品,例如我的UFO和Geoff Stearns的SWFObject,则可能是现在最完整和易用的库了。
虽然他们表面上看起来很像,但是两个库在底层是非常不一样的。比如说,SWFObject使用Adobe的两次烹调法,而UFO则生成了最标准的标 签。另一方面,他们都遵循了相同的构架原则:当所需的flash和javascript存在时,使用DOM脚本重写网页上的替换内容。
虽然他们都有对替换内容的支持,但是两个库都有一个共同的弱点,他们依赖javascript去插入flash,所以一小撮只有flash插件而没有javascript支持的用户就只能看见替换内容。
低调的DOM脚本
为了解决退化问题,使用一种低调脚本的嵌入方法会比较有效:这种混合方法使用Flash Satay那样的标准标签来嵌入Flash内容和替换内容,同时并不太显眼地调用DOM脚本,作为一种扩展来为浏览器解决问题和增加功能。
ObjectSwap就是基于这样的原则,并且我认为将会是未来flash嵌入库的榜样架构。不幸的是,ObjectSwap注意力主要集中在解决自动激活上,所以在解决版本检测和诸如IE上的流bug和老Safari的param bug这样的标签支持问题上,就没有多大作用。另一个可以提高的地方在于——所有低调库都应该加以注意的是——性能。使用onload事件的话,你的 DOM相关代码只会在你整个页面,包括页面上的元素都加载完成后才执行。用DOMContentLoade事件来代替会更好,那就会在DOM加载完后立即触发。但是DOMContentLoade并没有被所有浏览器支持,你也许可以用这个方案代替。
flash嵌入的未来
虽然完美的方案也许还没有被写出来,但我确实觉得我们已经在正确的方向上走了很远。如果我们把不同库的好特性组合在一起,我们应该能够实现我们在文章开头定义的那些原则。为了研究这样的解决方案,Geoff Stearns和我已经共同工作,我们正在努力写一个新的标准的并且低调的解决方案,而不是重写UFO和SWFObject。它会最终替代这两个库。合作的成果是 SWFFix项目,现在是alpha阶段。[2]
动作快点,软件老大们!
虽然web开发者可以想出创新的变通方案来,但是只有浏览器和插件厂商可以做出真正实质性的进步。改掉那些明显的bug,采用支持web标准和替换内容的嵌入方法,他们可以让开发者得以用正确的方式来进行日常工作。所以软件老大们,觉得如何?
by Kevin Cornell
译注:
[1]微软新的补丁已经在浏览器中取消了这个特性。
[2]UFO和swfobject1.5的升级替代品目前是swfobject2.0,实际使用的html是上面讲的条件注释方式。
精品网站程序下载(草根站长最爱)
QQ2013,QQ2012临时会话插件(全国首发)
711旅游网站管理系统V2013(无功能限制)
711幻灯片管理系统(全国首发) 各类网站程序下载
711企业网站管理系统V2013个人版(无功能限制)
711免费在线客服系统个人版 V2.0
电影小偷采集程序V2013免费下载 点此查看
更多的网页中嵌入flash的最佳方案请到论坛查看: http://BBS.TC711.COM
【 双击滚屏 】 【 评论 】 【 收藏 】 【 打印 】 【 关闭 】
来源:
互联网
日期:2009-2-20
|
|
|
|
|