Flash嵌入基础:embed和object
有两个标签可以让你在网页上嵌入flash。一个是已有的embed,所有的浏览器都支持它。(» 表示连接换行 -Ed)
<embed type="application/x-shockwave-flash" »
src="myContent.swf" width="300" height="120" »
pluginspage="http://www.adobe.com/go/getflashplayer" />
<noembed>Alternative content</noembed>
另一个是W3C建议的object. 因为W3C规范给如何实现插件内容留了相当大的空间,结果出现了两种不同的object实现方式。
大多数现代浏览器实现了遵循标准的方式,将embed标签替换为object的MIME类型,以此来确定插件的类型。
<object type="application/x-shockwave-flash" »
data="myContent.swf" width="300" height="120">
<p>Alternative content</p>
</object>
这种方式是各种浏览器通用的,所以是比较好的实现。
第二种实现来自Windows的IE,其中需要定义object的classid属性,这样浏览器才能正确载入Flash播放器的ActiveX控件。这种实现是有效的,但不是浏览器通用的。
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8- »
444553540000" width="300" height="120">
<param name="movie" value="myContent.swf" />
<p>Alternative content</p>
</object>
注意:这两个例子中我都故意省略了codebase参数,这个参数通常指向Adobe的Flash插件安装包位置,用来在浏览器没有安装插件的时候自动下载。但这是和标准中禁止文档访问跨域资源的精神相违背的,而且有些现代浏览器并不支持。
为什么还有embed
从web标准的观点来看,可能会觉得直接砍掉embed标签就可以了,但这从来没有也永远不会成为一个W3C建议,因为专利问题。但是实际上它 确实比单独的object标签拥有更好的跨浏览器支持。所以它现在成了许多流行的站点诸如Google Video和Brightcove的选择。
尽管web标准是为了避免兼容性问题而建立的,但embed却比W3C支持的object更为明确。embed的严格实现规范和良好支持已经把 它变成了一项事实上的标准,它会一直阴魂不散,直到object标签得到广泛并且足够长时间支持,长到已经可以忽略那些不喜欢它的浏览器版本。
那么现在所谓的浏览器支持性的问题到底是什么?
web标准不被支持的地方
object的两种实现并没有摧毁web标准,但它是很多问题的根源。后果之一是,我们需要找一个方法去把两种object实现联合在一起构成一个统一的技术。更糟糕的是,我们不得不处理那些(曾经)对object不完全支持的浏览器。来看下这些问题:
* 一般的object实现在Windows IE下是不行的,IE加载了插件和swf文件,但却根本不显示flash内容。
* 我们加入movie参数,以部分地联合这两种方案的时候,IE可以显示flash内容了,但却不进行流加载。
* 当我们完全把两种方案联合在一起的时候,IE正常了,但是Gecko核心的浏览器忽略了Flash内容并且显示替换内容。
object的一个特性是,你可以把不同的实现方案嵌套放在一起:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8- »
444553540000" width="300" height="120">
<param name="movie" value="myContent.swf" />
<object type="application/x-shockwave-flash" »
data="myContent.swf" width="300" height="120">
<p>Alternative content</p>
</object>
</object>
不幸的是,老版本的IE在处理嵌套的object的时候存在bug:试图去渲染两个flash。
更糟的是,Mac OS 10.3上,版本在1.2.2以下(含1.2.2)的Safari会忽略object里面嵌套的param标签,虽然他们支持embed标签的同样属性。
注意:你可能会问你自己,上面的方法里把同样的内容、参数、属性写两遍到底有多大意义。比如说,这种联合方法让JavaScript跟Flash内容通信更困难,因为你要先测试你到底在跟哪个object通信。
我们朝着一个更好的世界缓慢的进步:这些bug中有的正在被逐渐解决,但是bug到无以复加的IE的object实现仍然使得object的采用困难重重。我们只能将解决的希望寄予在不久的将来了。
更多的网页中嵌入flash的最佳方案请到论坛查看: http://BBS.TC711.COM
【 双击滚屏 】 【 评论 】 【 收藏 】 【 打印 】 【 关闭 】
来源:
互联网
日期:2009-2-20