【问题标题】:Chrome extension - "webNavigation.onComitted" event is fired twiceChrome 扩展 - “webNavigation.onComitted”事件被触发两次
【发布时间】:2013-09-11 05:41:02
【问题描述】:

我现在正在开发一个 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。

【问题讨论】:

  • 您是否已经检查过 Facebook 是否包含指向 Facebook 的框架?
  • 不。我马上去看看!谢谢!!!

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


【解决方案1】:

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

frameId(整数)

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

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多