未捕获的SyntaxError:意外的标记%

时间:2012-03-26 21:05:55

标签: javascript flash google-chrome youtube

我有一个页面,其中包含多个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 ""或函数名称,那么它不会抛出错误(但我也没有获得状态信息)。

显然,错误信息是假的,但任何人都知道我尝试做的事情是否可行?

1 个答案:

答案 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);
};

我还没有对它进行全面测试(因为我在昨天结束时这样做了),但我认为它会起作用。

开始测试它,它就像一个魅力!它在想法和实现方面都有点难看,但它有效,这才是最重要的:)