2013-09-07 3 views
3

Я разрабатываю хром-расширение.Расширение Chrome - событие «webNavigation.onComitted» дважды запускается

Я столкнулся с этой проблемой, что событие «webNavigation.onComitted» запускается дважды на facebook.com, когда я получаю доступ к facebook.

Это код, который у меня есть сейчас, но он дважды печатает «Facebook» в консоли.

// while logging in facebook.com, it prints "facebook" in console. 
chrome.webNavigation.onCommitted.addListener(function(e) { 

    console.log("Facebook"); 

}, {url: [{urlPrefix : 'https://www.facebook.com/'}]}) 

С другой стороны, этот код работает нормально. Когда я обращаюсь к youtube.com, он печатает «youtube» только один раз в консоли, как я ожидаю.

В любом случае, я хочу, чтобы он загружался только один раз при доступе к facebook.com.
Как я могу заставить его работать?

Если кто знает, как исправить эту проблему, пожалуйста, помогите мне!

Спасибо заранее!

То, что я пытался

http://developer.chrome.com/extensions/webNavigation.html#events

Я перепробовал все другие типы событий, таких как "onBeforeNavigate", "OnCompleted". Но это не решает мою проблему.

Полезные связанные пост на StackOverflow

Chrome extension, javascript: Why is this firing twice?

Эта страница похожа на мою проблему, но эта страница говорит о событии "tabs.onUpdated".

поскольку событие «tabs.onUpdated» не содержит фильтра событий, я предпочитаю использовать API «webNavigation».

+0

Вы уже проверили, содержит ли Facebook фрейм, указывающий на Facebook? –

+0

нет. Я проверю это прямо сейчас! Благодаря!!! – crzyonez777

ответ

5

От http://developer.chrome.com/extensions/webNavigation.html#event-onCommitted:

frameId (целое число)

0 указывает на то, навигация происходит в окне вкладки контента; положительное значение указывает на навигацию в подкадре. Идентификаторы кадров уникальны на вкладке.

Если вы добавляете console.log(e) внутри обработчика события, вы увидите, что первое событие имеет frameId = 0, в то время как второе событие имеет положительное число, которое означает, что он принадлежит к IFRAME. Если вас интересует только просмотр в главном окне, просто добавьте чек на e.frameId === 0 в начале вашего обработчика событий.

+0

О, я вижу !!! Большое спасибо!!! Я не думал об iframes внутри страницы. – crzyonez777

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