为什么在IE8中卸载时,YouTube的JavaScript API会导致错误?

时间:2010-08-19 14:15:47

标签: javascript youtube-api

此时我很难过。每次我在Internet Explorer 8中刷新页面时,下面的嵌入代码都会导致“Object Required”错误(可能还有其他版本的IE,但我没有随时可用于测试)。

它在其他浏览器中运行良好。

这么简单的代码:

<object width='425' height='344'>
    <embed src='http://www.youtube.com/v/3kU1x9StavM?enablejsapi=1' type='application/x-shockwave-flash' width='425' height='344' allowscriptaccess='always' allowfullscreen='true'></embed>
</object>

即使它确实是页面上唯一的内容,也会出错。

有没有人有任何想法?我没有使用swfobject的选项,因为我将重写嵌入式标签以启用jsapi(我正在编写一个交互式的transcript插件,需要基本上加载自己并且不需要发布者的额外操作使用)。

4 个答案:

答案 0 :(得分:1)

使用SWFObject嵌入绝对是一种正确的方法。我们在IE6 +中遇到了完全相同的问题,一旦使用swf对象嵌入视频,它就消失了。

答案 1 :(得分:0)

IE上的js api存在问题......其他人在这里谈到http://support.soundcloud.com/soundcloud/topics/sets_breaking_in_ie8 如果删除jsapi参数或将allowscriptaccess的值设置为sameDomain,或者永远不会错误消失,但您不能再使用API​​:(

答案 2 :(得分:0)

不幸的是,我无法深究这一点。这令人沮丧。

最终,IE在无序创建对象时将事件绑定到flash对象存在一些问题。

毕竟我最终只使用了swfobject.js。他们在某些我无法复制的地方工作。

答案 3 :(得分:0)

这是因为页面上的javascript调用卸载到不再存在的对象(视频嵌入)。下面的代码在页面卸载之前删除了嵌入,因此在IE8中没有更多错误:

Event.observe(window, 'beforeunload', function(){
    var player = $("video-embed-element");
    player.remove();
}, false);

我还强烈建议使用IF语句来围绕代码,该语句检查以确保浏览器是IE8,as described here