将Flash文件嵌入Web页面
时间:2006-08-08 来源:xmankan
这篇文章N久以前看过,为了兴趣和使用方便,现在把它翻译下来。
题目:Flash烧烤:Flash嵌入之与标准同行 Drew Mclellan
和Flash打了好几年交道,那(me:读nèi)种往页面嵌入影片的标记法,老让我觉着不爽。最近做了一个XHTML的网站后,才发现这玩意儿根本不是那么回事儿,让人不爽的标记法差点儿要了我网站的小命。一个干练,并为标准所纳的Flash影音文件嵌入法呼之欲出。
重烹法
为了正常播放影音文件,Flash插件一般是和生成HTML页面的方法一起装载(ship)滴。最开始,这个插件被叫做AfterShock。在Flash4以后,我们可用专门的Flash开发环境制作出嵌入Flash文件的HTML页面。下面列出的一大串HTML标记就是由Flash开发环境生成的,99%的网站都在用,这使它成了公认的Flash嵌入的标准方法。
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com
/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
width="400" height="300" id="movie" align="">
<param name="movie" value="movie.swf">
<embed src="movie.swf" quality="high" width="400"
height="300" name="movie" align=""
type="application/x-shockwave-flash"
plug inspage="http://www.macromedia.com/go/getflashplayer">
</object> 你也看见了,恐怖吧!~嵌入时主要用到了2个标签,每个相同的参数要被设置2次。第一个标签只对IE和其衍生(followers)浏览器起作用;兼容性较好的Netscape浏览器则使用后者。顾名思义,我们称之重烹法(me:因为是"Flash烧烤"嘛~)。 <object>标签由XHTML规范指定。但在这里没有被正确使用。IE类浏览器用它创建一个Flash Player的实例以便向其加载指定的影音文件。<object>包含<param>元素,可以用它向Flash Player传递各种参数。 <embed>标签本不在XHTML规范之内,所以包含它的页面不能通过验证(me:估计是W3C的HTML Validator)。Netscape和一些其它浏览器用<embed>播放Flash影音文件。<embed>标签通过名值对传递参数。 <embed>元素 <embed>元素被Netscape用来向Web页嵌入插件和播放器。它不属于XHTML规范,也有其它一些浏览器支持它,但它与标准背道而驰,总是要被淘汰的。 <object>元素 现在<embed>已经出局,我们只能用<object>了,所以必须搞清楚它的每个细节。还好大部分浏览器都支持<object>标签哦~ <object>元素有很多属性,但没有一个是必要的。下面粗体显示的就是W3C规范中最常用的。 classid(URI)此属性被赋予一个URI,指定了对象的位置。它往往和data属性一起用,或者也可以代替data属性(见下),要看对象的情况而定。 codebase(URI)此属性指定了解析URI的基础路径,URI可以有多个,可能来自classid,data和archive属性。它的缺省值是当前文档的基础URI。 data(URI)此属性指定对象数据的位置,通常,它是能反复使用的对象的序号。 type(content-type)此属性指定data元素表示的数据的内容类型(content type)。 codetype(content-type)此属性指定,当下载classid设置的对象时,数据的内容类型(content type)。 从参考文献我们得知,还有一些其它的属性没有介绍,如加载页面时对文本显示的控制方面(虽然我们已经可以通过Flash来这么做),就有width,height,id,class和其它公共属性。那些以黑体列在上面的属性,只是对嵌入Flash影音文件来说比较重要而已。 而且我知道如果就算浏览器不能通过<object>正常显示对象,那么<object>标签的子元素一样会帮它完成工作。这就是为什么讨厌的<embed>可以被Netscape浏览器识别的原因(me:but more on that later.这句没译)。 处理过程 纸上谈兵结束,接下来我要在不同浏览器上做一些具体的测试。第一步就是把上面提到的Macromedia风格的<embed>标签剥去,还大家一个干净整洁的XHTML。 <object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com
/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
width="400" height="300">
<param name="movie" value="movie.swf" />
</object> 真倒霉,用这种写法只有IE才能识别。我又去网上搜了一下,发现classid所对应的Guid就相当于浏览器的ActiveX设置。这其实是上面提到的Netscape7和Mozilla都不能正常工作的症结所在。classid属性很重要的:它告诉浏览器该用哪个播放器。所以在丢弃旧写法之前必须考虑如何再找一个功能上完全等价的方法。 好在Flash Player被设置成用application/x-shockwave-flash(MIME类型)输出内容。这样就能用type属性来指定内容的类型。于是抛弃了下面的代码: classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 而采用: type="application/x-shockwave-flash" Codebase 以上的改变还不能使Netscape浏览器正常播放影音文件。看看能不能在codebase属性上发现点什么吧。它声明了一个Macromedia服务器上Flash插件的某个版本的路径。这个路径被设置到同一个有安全特征的域,天,怎么能这么用它呢? 许多浏览器(主要是IE)的codebase属性有另一个功能。其声明路径的末端包含一个字串,用来指定服务器应该提供的插件版本。如果这里声明的版本比客户机自带的版本新,那浏览器会要求用户更新。于是这个属性的设置另一方面也会使Flash影音文件不能在Netscape和Mozilla里播放,必须去掉它。我们以后还要全面讨论codebase的工作机制。这么个大头去掉了,标记也精简了许多: <object
type="application/x-shockwave-flash"
width="400" height="300">
<param name="movie" value="movie.swf" />
</object>
再试一下,还是不能在Netscape里加载影音文件!走到这一步,真的很担心还有没有合理的标记法,来让Netscape浏览器播放Flash了,但以前在网上我已经回答了N次这个问题,怕毛啊(me:- -)。按部就班不成,动动歪脑子总可以吧~ 未完待续 水平有限,仅供个人参考。转载请注明出处和链接。
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com
/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
width="400" height="300" id="movie" align="">
<param name="movie" value="movie.swf">
<embed src="movie.swf" quality="high" width="400"
height="300" name="movie" align=""
type="application/x-shockwave-flash"
plug inspage="http://www.macromedia.com/go/getflashplayer">
</object> 你也看见了,恐怖吧!~嵌入时主要用到了2个标签,每个相同的参数要被设置2次。第一个标签只对IE和其衍生(followers)浏览器起作用;兼容性较好的Netscape浏览器则使用后者。顾名思义,我们称之重烹法(me:因为是"Flash烧烤"嘛~)。 <object>标签由XHTML规范指定。但在这里没有被正确使用。IE类浏览器用它创建一个Flash Player的实例以便向其加载指定的影音文件。<object>包含<param>元素,可以用它向Flash Player传递各种参数。 <embed>标签本不在XHTML规范之内,所以包含它的页面不能通过验证(me:估计是W3C的HTML Validator)。Netscape和一些其它浏览器用<embed>播放Flash影音文件。<embed>标签通过名值对传递参数。 <embed>元素 <embed>元素被Netscape用来向Web页嵌入插件和播放器。它不属于XHTML规范,也有其它一些浏览器支持它,但它与标准背道而驰,总是要被淘汰的。 <object>元素 现在<embed>已经出局,我们只能用<object>了,所以必须搞清楚它的每个细节。还好大部分浏览器都支持<object>标签哦~ <object>元素有很多属性,但没有一个是必要的。下面粗体显示的就是W3C规范中最常用的。 classid(URI)此属性被赋予一个URI,指定了对象的位置。它往往和data属性一起用,或者也可以代替data属性(见下),要看对象的情况而定。 codebase(URI)此属性指定了解析URI的基础路径,URI可以有多个,可能来自classid,data和archive属性。它的缺省值是当前文档的基础URI。 data(URI)此属性指定对象数据的位置,通常,它是能反复使用的对象的序号。 type(content-type)此属性指定data元素表示的数据的内容类型(content type)。 codetype(content-type)此属性指定,当下载classid设置的对象时,数据的内容类型(content type)。 从参考文献我们得知,还有一些其它的属性没有介绍,如加载页面时对文本显示的控制方面(虽然我们已经可以通过Flash来这么做),就有width,height,id,class和其它公共属性。那些以黑体列在上面的属性,只是对嵌入Flash影音文件来说比较重要而已。 而且我知道如果就算浏览器不能通过<object>正常显示对象,那么<object>标签的子元素一样会帮它完成工作。这就是为什么讨厌的<embed>可以被Netscape浏览器识别的原因(me:but more on that later.这句没译)。 处理过程 纸上谈兵结束,接下来我要在不同浏览器上做一些具体的测试。第一步就是把上面提到的Macromedia风格的<embed>标签剥去,还大家一个干净整洁的XHTML。 <object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com
/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
width="400" height="300">
<param name="movie" value="movie.swf" />
</object> 真倒霉,用这种写法只有IE才能识别。我又去网上搜了一下,发现classid所对应的Guid就相当于浏览器的ActiveX设置。这其实是上面提到的Netscape7和Mozilla都不能正常工作的症结所在。classid属性很重要的:它告诉浏览器该用哪个播放器。所以在丢弃旧写法之前必须考虑如何再找一个功能上完全等价的方法。 好在Flash Player被设置成用application/x-shockwave-flash(MIME类型)输出内容。这样就能用type属性来指定内容的类型。于是抛弃了下面的代码: classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 而采用: type="application/x-shockwave-flash" Codebase 以上的改变还不能使Netscape浏览器正常播放影音文件。看看能不能在codebase属性上发现点什么吧。它声明了一个Macromedia服务器上Flash插件的某个版本的路径。这个路径被设置到同一个有安全特征的域,天,怎么能这么用它呢? 许多浏览器(主要是IE)的codebase属性有另一个功能。其声明路径的末端包含一个字串,用来指定服务器应该提供的插件版本。如果这里声明的版本比客户机自带的版本新,那浏览器会要求用户更新。于是这个属性的设置另一方面也会使Flash影音文件不能在Netscape和Mozilla里播放,必须去掉它。我们以后还要全面讨论codebase的工作机制。这么个大头去掉了,标记也精简了许多: <object
type="application/x-shockwave-flash"
width="400" height="300">
<param name="movie" value="movie.swf" />
</object>
再试一下,还是不能在Netscape里加载影音文件!走到这一步,真的很担心还有没有合理的标记法,来让Netscape浏览器播放Flash了,但以前在网上我已经回答了N次这个问题,怕毛啊(me:- -)。按部就班不成,动动歪脑子总可以吧~ 未完待续 水平有限,仅供个人参考。转载请注明出处和链接。
500)this.width=500;" border=0>
相关阅读 更多 +