如何避免chrome扩展中的tab重复

时间:2013-11-23 03:40:37

标签: google-chrome-extension

您好我已将我的网站设置为Chrome扩展程序。问题是我点击扩展程序图标的次数打开了很多标签。我需要当我点击扩展程序图标时我必须检查该标签已经打开了。如果它已经打开,那么只需显示该标签。否则创建另一个标签。我怎么能这样做?请帮助我。我知道这是一个简单的问题。但我无法弄明白。请发布。请帮我。 这是我的background.js

  function getGmailUrl() {
    return "http://calpinemate.com/";
    }
     function isGmailUrl(url) {

      return url.indexOf(getGmailUrl()) == 0;
         }
       chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.getAllInWindow(undefined, function(tabs) {
for (var i = 0, tab; tab = tabs[i]; i++) {
  if (tab.url && isGmailUrl(tab.url)) {
    console.log('Found Gmail tab: ' + tab.url + '. ' +
                'Focusing and refreshing count...');
    chrome.tabs.update(tab.id, {selected: true});          
    return;
  }
  }
console.log('Could not find Gmail tab. Creating one...');
chrome.tabs.create({url: getGmailUrl()});
  });

 });

我无法弄清问题是什么。请帮帮我

1 个答案:

答案 0 :(得分:0)

问题是你的for循环中的条件搞砸了,所以它没有循环遍历所有标签。
BTW, chrome.tabs.getAllInWindow 已弃用。请改用 chrome.tabs.query (见下文)。

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.query({
        url: "http://calpinemate.com/*",
        currentWindow: true
    }, function(tabs) {
        if (tabs.length > 0) {
            var tab = tabs[0];
            console.log("Found (at least one) Gmail tab: " + tab.url);
            console.log("Focusing and refreshing count...");
            chrome.tabs.update(tab.id, { active: true });
        } else {
            console.log("Could not find Gmail tab. Creating one...");
            chrome.tabs.create({ url: getGmailUrl() });
        }
    });
});