Chrome扩展程序 - “webNavigation.onComitted”事件被触发两次

时间:2013-09-07 03:20:03

标签: javascript google-chrome google-chrome-extension

我正在开发Chrome扩展程序。

我遇到了这个问题,当我访问facebook时,“webNavigation.onComitted”事件在facebook.com上被触发两次。

这是我现在的代码,但它在控制台中两次打印“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”。

// on accessing youtube.com, it prints "youtube" in console.
chrome.webNavigation.onCommitted.addListener(function(e) {

    console.log("youtube");

}, {url: [{urlPrefix : 'http://www.youtube.com/'}]})

无论如何,我希望它在访问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”事件不提供事件过滤器,我更喜欢使用“webNavigation”API。

1 个答案:

答案 0 :(得分:5)

来自http://developer.chrome.com/extensions/webNavigation.html#event-onCommitted

  

frameId(整数)

     

0表示导航发生在选项卡内容窗口中;正值表示子帧中的导航。框架ID在选项卡中是唯一的。

如果在事件处理程序中添加console.log(e),您会看到第一个事件有frameId = 0,而第二个事件有一个正数,这意味着它属于iframe。如果您只对主窗口导航感兴趣,只需在事件处理程序的开头添加e.frameId === 0的检查。