【发布时间】:2015-10-24 06:21:48
【问题描述】:
我使用异步加载 youtube 播放器 API 的 Javascript 解决方案。 整个脚本应该在滚动到其位置时播放视频。 它适用于所有浏览器以及 IE(11),但 有时 在 IE 中我在开发人员工具中收到错误:SCRIPT445(对象不支持此操作)。
Youtube 播放器仍然可以工作,但它似乎使其他脚本崩溃。我在网上和 Stackoverflow 上环顾四周。似乎还有其他人有类似的问题,但他们太具体了。也许有人可以帮我解决这个问题。这是导致问题的代码部分:
var yt_int, yt_players={},
initYT = function() {
$(".ytplayer").each(function() {
yt_players[this.id] = new YT.Player(this.id); <-- Error line
});
};
$.getScript("//www.youtube.com/player_api", function() {
yt_int = setInterval(function(){
if(typeof YT === "object"){
initYT();
clearInterval(yt_int);
}
},500);
});
【问题讨论】:
-
是否有可能在加载 youtube 播放器脚本之前运行错误行?
-
当然,很有可能 ;) 我认为 yt_int 必须在 getScript 使用它之前声明。所以你的意思是切换
$.getScript()和var yt_int, yt_players={}的位置会有帮助吗?我刚试过..似乎有效,问题是它非常零星(难以调试) -
某种竞争条件是我唯一能想到的,也许可以尝试使用 setTimeout 来卸载 init 函数的执行。而不是 initYT(),setTimeout(initYT, 0)。
-
所以,在 3 个不同的系统上进行了 30 多次刷新后,
setTimeout(initYT, 0)似乎真的修复了它 :) 非常感谢!我怎样才能将您的评论声明为正确答案? -
添加了答案。很高兴我能帮上忙!
标签: javascript youtube internet-explorer-11