从YouTube嵌入功能获得的典型代码片段如下所示:
<object width="660" height="405">
<param name="movie" value="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&hl=en_GB&border=1"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&hl=en_GB&border=1"
type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true"
width="660"
height="405">
</embed>
</object>
现在,
<embed>
元素具有type属性,以告知浏览器它正在嵌入Flash文件,但是对于使用<object>
标记的浏览器,似乎没有可用的信息!为什么这里不需要classid or codebase属性?我能想到的唯一选择是:
<embed>
标记我找不到文档来验证这两个选项。我很好奇!
编辑:找到了great comparison of Flash embedding techniques here。仍然想知道它是如何工作的...
最佳答案
我做了一些实验,发现删除<embed>
标记会导致IE无法嵌入视频。 IE使用了embed标签令我感到惊讶,因此更加深入。如果您只想知道答案,请在末尾向下滚动“摘要”!
在IE8中工作的最简单的方法是:
<embed src="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&hl=en_GB&border=1"
width="660"
height="405">
</embed>
那里没有type属性,因此浏览器必须检查src属性的MIME类型以弄清楚该怎么做。我通过提供具有不同MIME类型的Flash文件进行了验证-除非提供了application/x-shockwave-flash的type属性,否则它将无法播放(此行为记录在IE here中)
当然,如果
<object>
标记确实包含classid,则<embed>
将被忽略,这就是您所期望的。我通过让嵌入标签引用其他视频来验证了这一点<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="660" HEIGHT="405" id="adobeWay">
<PARAM NAME=movie VALUE="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&hl=en_GB&border=1">
<PARAM NAME=quality VALUE=high>
<PARAM NAME=bgcolor VALUE=#FFFFFF>
<embed src="http://youtube.com/v/rIFh1ydXWmg"
type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true"
width="660"
height="405">
</embed>
</OBJECT>
使用object标签时,Flash插件并不关心电影的MIME类型是什么。再次,我通过提供具有不同MIME类型的有效SWF文件来验证这一点。
从上一次测试中删除classid,然后在
<embed>
标签中获得替代视频。这使我想知道为什么在YouTube样式的嵌入中根本没有<param>
标记的原因。概括
如果
classid
中没有<object>
属性(或任何其他确定所需插件的方法,例如data属性),则IE会呈现其在对象标记中可以找到的任何内容,这意味着它将呈现<embed>
标记(即IE称为object fallback) 。如果该标签不包含type
属性,则使用src
的MIME类型来确定要使用的正确插件。关于flash - 在object标签中没有classid的情况下,YouTube嵌入如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3546688/