我有一个页面,其中包含多个YouTube嵌入式播放器,我需要监听活动。我正在尝试使用发布的解决方案作为Using Youtube's javascript API with jQuery的答案,但我收到一个奇怪的错误:(在Chrome 18.0.1025.137 beta-m中)
Uncaught SyntaxError: Unexpected token %
这是错误的程度,包括stacktrace。我的代码是这样的:
var onYouTubePlayerReady = function (id) {
var evt = '(function(){})';
alert(eval(evt)); //just to verify that the snippet is syntactically correct
var ytplayer = document.getElementById(id);
ytplayer.addEventListener("onStateChange", evt);
};
(有关更多背景,请参阅其他问题)
触发onStateChange
事件时会引发错误。如果我创建evt
""
或函数名称,那么它不会抛出错误(但我也没有获得状态信息)。
显然,错误信息是假的,但任何人都知道我尝试做的事情是否可行?
答案 0 :(得分:0)
实际上,事实证明这是非常愚蠢的。在Firefox中运行代码产生了一条真实的错误消息:
syntax error
try { __flash__toXML(%28function%28%29%7B%7D%29(5)) ; } catch (e) { "<undefined/...
---------------------^
因此,显然,它需要可序列化为XML才能用作回调。这真的很烦人。
我的解决方案是这样的:
var ytCallbackID = 1;
var makeYTCallback = function (func) {
var ret = "ytCallback" + (ytCallbackID++);
window[ret] = func;
return ret;
}
var onYouTubePlayerReady = function (id) {
var evt = makeYTCallback(function(state) {
onYouTubePlayerStateChange(id, state);
});
var ytplayer = document.getElementById(id);
ytplayer.addEventListener("onStateChange", evt);
};
我还没有对它进行全面测试(因为我在昨天结束时这样做了),但我认为它会起作用。
开始测试它,它就像一个魅力!它在想法和实现方面都有点难看,但它有效,这才是最重要的:)