选项卡在点击页面操作上重复

时间:2013-08-22 08:05:06

标签: google-chrome-extension

background.html:

// Called when the url of a tab changes.
function checkForValidUrl(tabId, changeInfo, tab) {
    if(changeInfo.status === "loading") {
      if (tab.url.indexOf('google.com') > -1) {
      // ... show the page action.
      chrome.pageAction.show(tabId);
      chrome.pageAction.onClicked.addListener(function(tab){

    chrome.tabs.create({url: "facebook.com", "active":true});

      });      
}
}
};


// Listen for any changes to the URL of any tab.
chrome.tabs.onUpdated.addListener(checkForValidUrl);

所以,我继续google,点击页面操作,在新标签页面打开facebook。我再次使用google 新标签,点击页面操作,然后打开2个facebook-tabs。它很奇怪,因为我需要 - 点击页面操作 - 1个新选项卡。如何解决?

感谢。

1 个答案:

答案 0 :(得分:1)

问题是,每次选项卡更改时,您都会添加一个事件侦听器。

由于每次标签更改时都会调用checkForValidUrl,因此每次标签更改时都会调用chrome.pageAction.onClicked.addListener。现在你的pageAction有两个事件监听器做同样的事情。您可以通过多次更改标签来验证这一点,并看到它将打开与更改标签一样多的Facebook标签。

要解决此问题,您当然应从checkForValidUrl

中删除以下内容
chrome.pageAction.onClicked.addListener(function(tab){
  chrome.tabs.create({url: "facebook.com", "active":true});
});

并将其放在外面,例如,在为chrome.tabs.onUpdated设置听众之后。