Uncaught SyntaxError: Неожиданный токен% - PullRequest
0 голосов
/ 27 марта 2012

У меня есть страница с несколькими встроенными плеерами YouTube, на которой мне нужно слушать события. Я пытаюсь использовать решение, опубликованное в ответ на Использование javascript API YouTube с jQuery , но получаю странную ошибку: (в Chrome 18.0.1025.137 beta-m)

Uncaught SyntaxError: Unexpected token %

Это степень ошибки, включая трассировку стека. Мой код такой:

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 голосов
/ 27 марта 2012

На самом деле, оказывается, это невероятно глупо.Выполнение кода в 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);
};

Я не полностью протестировал его (так как я сделал это прямо в концевчерашний день), но я думаю, что это сработает.

Добрался до его тестирования, и он работает как шарм!Это немного непонятно, как по идее, так и по реализации, но это работает, и вот что важно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...