2015-11-21 5 views
0
//In background.js 
chrome.tabs.onUpdated.addListener(function(tabid, info, tab) { 
    console.log(info); 
}); 

Я пытаюсь настроить его так, что onUpdate запускается каждый раз, когда загружается страница видео на YouTube. Я хочу ждать загрузки после загрузки видео на YouTube. Когда я загружаюсь непосредственно из URL-адреса, я получаю то, что ожидаю, но когда я перехожу к предлагаемому видео, есть 2 цикла загрузки/завершения. Один для текущего видео, один для следующего видео.chrome extension chome.tabs.onUpdate работает в два раза?

Direct Url

Это выход для прямого URL видео YouTube.

Navigating

Это то, что происходит, если я перейти к видео YouTube во время просмотра другой видео YouTube.

В моем манифесте у меня есть простой скрипт background.js, разрешение на webNaviagtion и Tabs.

Я не знаю, почему он работает дважды.

ответ

2

tabs.onUpdated вызывается для каждого frame/iframe, страница просмотра Youtube загружает одну.

webNavigation APIframeId прослуше ний, главная страница имеет frameId == 0.

Обратите внимание, что Youtube не перезагружает страницу, когда пользователь переходит с одного видео на другой или с главной страницы Youtube на видеостраницу, поэтому для обнаружения этих изменений вы можете использовать chrome.webNavigation.onHistoryStateUpdated прослушиватель событий или скрипт контента, который будет прослушивать к событиям DOM, используемым сайтом, а именно "spfdone".

+0

Спасибо за ответ. Я просто попробовал onHistoryStateUpdate, и я все еще получаю его дважды, оба журнала имеют frameId из 0. – Johnny

+0

Это означает, что состояние истории дважды обновлялось страницей. – wOxxOm

+0

Ах, ладно, я думаю, теперь мой вопрос будет таким, как я его настроить, чтобы он работал только на странице, которую я собираюсь. Он запускается для текущего URL-адреса youtube, а затем следующего URL-адреса. http://imgur.com/lcKjZc6 – Johnny

Смежные вопросы