Javascript 铬合金延伸件;webNavigation.oncommitted";事件被触发两次

Javascript 铬合金延伸件;webNavigation.oncommitted";事件被触发两次,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我现在正在开发一个chrome扩展 我遇到了一个问题,当我访问facebook时,facebook.com上的“webNavigation.oncommitted”事件被触发了两次 这是我现在拥有的代码,但它在控制台中打印“Facebook”两次 // while logging in facebook.com, it prints "facebook" in console. chrome.webNavigation.onCommitted.addListener(function(e) {

我现在正在开发一个chrome扩展

我遇到了一个问题,当我访问facebook时,facebook.com上的“webNavigation.oncommitted”事件被触发了两次

这是我现在拥有的代码,但它在控制台中打印“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时只加载一次。
我怎样才能让它工作

如果有人知道如何解决这个问题,请帮助我

提前谢谢

我尝试的

我尝试了所有其他事件类型,如“onBeforeNavigate”、“onCompleted”。 但这并不能解决我的问题

有关stackoverflow的有用相关帖子

此页面与我的问题类似,但此页面讨论的是“tabs.onUpdate”事件

由于“tabs.onUpdate”事件不提供事件筛选器,我更喜欢使用“webNavigation”API。

来自:

frameId(整数)

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


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

您是否已经检查过Facebook是否包含指向Facebook的框架?否。我现在就去看看!谢谢