Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如果对象标记中没有classid,YouTube嵌入如何工作?_Flash_Activex_Youtube_Embed - Fatal编程技术网

Flash 如果对象标记中没有classid,YouTube嵌入如何工作?

Flash 如果对象标记中没有classid,YouTube嵌入如何工作?,flash,activex,youtube,embed,Flash,Activex,Youtube,Embed,从YouTube嵌入功能获得的典型代码片段如下所示: <object width="660" height="405"> <param name="movie" value="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&amp;hl=en_GB&amp;border=1"></param> <param name="allowFullScreen" value="true"></

从YouTube嵌入功能获得的典型代码片段如下所示:

<object width="660" height="405">
  <param name="movie" value="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&amp;hl=en_GB&amp;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&amp;hl=en_GB&amp;border=1"
         type="application/x-shockwave-flash" 
         allowscriptaccess="always" 
         allowfullscreen="true" 
         width="660" 
         height="405">
  </embed>
</object>

现在,
元素有一个type属性来告诉浏览器它正在嵌入一个flash文件,但是对于使用
标记的浏览器,浏览器似乎没有可用的信息

为什么这里不需要属性?我能想到的唯一选择是:

  • IE假设在没有其他信息的情况下嵌入Flash
  • 或者,IE从
    标签读取此信息
我找不到文档来验证这两个选项。我很好奇


编辑:找到一个。我仍然想知道它是如何工作的…

我做了一些实验,发现删除
标签会导致IE无法嵌入视频。我很惊讶IE使用了嵌入标签,所以深入研究。如果您只想知道答案,请向下滚动结尾处的“摘要”

IE8中最简单的一点是:

<embed src="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&amp;hl=en_GB&amp;border=1"
         width="660"
         height="405">
 </embed>

那里没有type属性,因此浏览器必须检查src属性的MIME类型,以确定要做什么。我通过提供一个不同MIME类型的Flash文件来验证这一点——除非我提供了application/x-shockwave-Flash的type属性,否则它不会播放(这种行为是为IE记录的)

当然,如果
标记确实包含classid,
将被忽略,这是您所期望的。我通过让嵌入标记引用另一个视频来验证这一点

<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&amp;hl=en_GB&amp;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,您将在
标记中获得替代视频。这让我想知道,如果在YouTube风格的嵌入中被忽略,为什么会有任何
标记

总结
中没有
classid
属性时(或确定所需插件的任何其他方法,如数据属性),IE将呈现在对象标记中可以找到的任何内容,这意味着它将呈现
标记(IE称之为此)。如果该标记不包含
type
属性,则使用
src
的MIME类型来确定要使用的正确插件。

它是MIME类型。这由服务器发送,以帮助浏览器识别内容的类型。MIME类型与helper插件相关联。

我意识到它可能是MIME类型,但只有当IE查看
标记时,这些信息才可用,这是一个惊喜。IE的实现总是不确定的。事实证明,这完全是出于设计。请参阅我答案中指向“对象回退”的链接。您是说IE仅在其具有
classid
时使用
object
,否则它将失败,并呈现其中的内容(通常是
embed
,这也是非标准的)。这是不正确的实现<代码>对象应该根据MIME自动确定插件。是的,但在这种情况下,对象不能-它没有被赋予数据属性,因此没有任何东西可供它获取和分析。