在没有SWFObject的IE6中使用jQuery嵌入YouTube视频

时间:2010-02-22 18:28:01

标签: javascript jquery flash video internet-explorer-6

这是我的代码:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<title></title>
<script>
$(document).ready(function(){
$("#video").html('<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/HPPj6viIBmU&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HPPj6viIBmU&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>');
});
</script>
</head>
<body>
  <div id="video"></div>
</body>
</html>

它适用于Firefox和Chrome,但IE6中的某些功能并不完全正确。遗憾的是,其中一个项目要求是支持这个浏览器,所以即使它在IE7中工作,我也需要解决这个问题。

我知道有SWFObject,但我宁愿不使用它(我们已经加载了一堆JS文件,我们不想要更多)。

即使这样也行不通:

  <script>
document.write('<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/HPPj6viIBmU&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HPPj6viIBmU&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>');
  </script>

似乎IE6忽略了<object>标签,这里是它嵌入的代码。

<EMBED src=http://www.youtube.com/v/HPPj6viIBmU&amp;hl=en_US&amp;fs=1&amp; width=480 height=385 type=application/x-shockwave-flash allowfullscreen="true" allowscriptaccess="always"></EMBED>

有解决方法吗?

感谢。

4 个答案:

答案 0 :(得分:10)

您寻找的解决方法将以您编写swfobject的等效项结束,除非它不会经过良好测试或执行。当有一个完美的现有解决方案时,为什么要重新发明轮子,特别是当它只缩小10KB时?如果你没有添加另一个http请求,那么为什么不将swfobject代码整合到页面或另一个js文件中。

我从不使用除swfobject之外的任何东西来嵌入flash。

答案 1 :(得分:1)

这有点奇怪,因为MS最初引入了对象标签来嵌入flash对象。

尝试将classid-parameter添加到object-tag中,例如:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="120">
    <param name="movie" value="myContent.swf" />    
</object>

答案 2 :(得分:0)

除了使用SWFObject之外,您还必须手动检测IE,然后使用

<embed>

这样的事情:

var isMSIE = /*@cc_on!@*/false;
if(isMSIE)
{
 //use embed tag
}
else
{
 //use object
}

请参阅:http://kb2.adobe.com/cps/127/tn_12701.html 用于嵌入和对象属性。

我认为你的embed标签存在的问题是你不能在其中放置Flash变量。他们必须进入flashvars。上面的链接将阐明如何执行此操作。但最好的测试方法是给它最小的属性,然后添加更多以查看是什么打破了它。

IE6的简单嵌入标记如下所示:

<embed src="MyFlashMovie.swf" quality="high" width="320" height="240" name ="MyMovieName" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>

答案 3 :(得分:0)

对于embed或object标签,有时需要使用DOM createElement和insertBefore或appendChild方法,而不是简单地使用document.write写出html。当您使用DOM方法时,它将通知浏览器动态添加新元素,浏览器应处理它以将其转换为插件对象。请参阅我为调整Silverlight对象大小并将其插入现有HTML文档所做的bookmarklet