addEventListener в скрипте содержимого не работает - PullRequest
7 голосов
/ 19 марта 2012

У меня есть расширение chrome с popup.html и внедренный скрипт содержимого. С помощью скрипта с внедренным контентом я пытаюсь получить доступ к функциям javascript API youtube, и все работает нормально, кроме одного: addEventListener.

Слушатель событий API javascript Youtube прослушивает состояние видео для изменения. Поэтому, если достигнут конец видео, состояние меняется на 0.

var currentVideo = document.getElementById('movie_player');
currentVideo.addEventListener("onStateChange", "onytplayerStateChange");

function onytplayerStateChange() {
   console.log("The state of the player has changed");
}

Этот фрагмент кода работает нормально в обычной среде, но не работает в скрипте содержимого. Почему я не могу поймать меняющиеся события в моем скрипте контента? Есть идеи?

1 Ответ

8 голосов
/ 20 марта 2012

Сценарии содержимого не выполняются в области действия текущей страницы. Обработчик событий должен быть вставлен с помощью другого тега <script>, как описано в этом ответе: Создание расширения Chrome с событиями Youtube :

var actualCode = 'function onytplayerStateChange() {'
               + '    console.log("The state of the player has changed");'
               + '}';

var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

PS. DOM доступен для скрипта содержимого, поэтому связывание с обработчиком событий работает.

...