如何检查特定页面是否已在Google Chrome中打开?

时间:2010-12-08 06:40:48

标签: javascript web-applications google-chrome tabs

基本上,我有一个打包的Web应用程序,如果Web应用程序的任何其他实例打开,我希望能够检查它,如果是,那么切换到打开的实例而不是创造另一个。

此外,对于选项页面,我希望它能够检查应用程序是否已打开,如果是,则在选项页面已更改时刷新应用程序页面。

我一直在阅读有关chrome.tabs JavaScript模块的documentation,但我无法弄清楚如何让函数查找特定的标签。我不太明白如何查找或设置特定选项卡的选项卡ID。我想这就是我想做的事情,但是如果我正在咆哮错误的树,请告诉我。

如果有人在这里可以更好地为我解释,我会非常感激。

5 个答案:

答案 0 :(得分:7)

查看具有此功能的Google Mail Checker扩展程序:

function goToInbox() {
  chrome.tabs.getAllInWindow(undefined, function(tabs) {
    for (var i = 0, tab; tab = tabs[i]; i++) {
      if (tab.url && isGmailUrl(tab.url)) {
        chrome.tabs.update(tab.id, {selected: true});
        return;
      }
    }
    chrome.tabs.create({url: getGmailUrl()});
  });
}

特别是,传递getAllInWindow windowId(或当前窗口未定义)和一个接收Tab对象数组的函数。您不直接修改选项卡的属性;而是将其id传递给更新函数以便操作它。

答案 1 :(得分:3)

要使Josh Lee的回答能够使用版本2清单,您必须为manifest.json文件中的选项卡添加权限:

...
"permissions": [
    "tabs"
]
...

我不知道这种结构如何为网络增添“安全性”......

答案 2 :(得分:1)

希望它能帮助初学者!

除了#Josh Lee的答案之外。

function openMyTab(mURL) {          

    if(!mURL){
       console.log("No url passed");
       return;
    }
  chrome.tabs.getAllInWindow(undefined, function(tabs) {
    for (var i = 0;i<tabs.length; i++) {

// remove (tabs[i].url.indexOf(mURL)!=-1) and 
// use tabs[i].url===url if you want exact match below

      if (tabs[i].url && (tabs[i].url.indexOf(mURL)!=-1)) {

        console.log("URL Match found",tabs[i].url);

        chrome.tabs.update(tabs[i].id, {url:url,selected: true});

        return;
      }
    }
     console.log("URL not found. Creating new tab");

    chrome.tabs.create({url: url});
  });

答案 3 :(得分:0)

以防任何人计划使用上述示例,&#34;选择&#34;自Chrome 33以来,该选项已被弃用,使用&#34;突出显示&#34;相反的选择。

答案 4 :(得分:0)

这些答案虽然有用,但它们已经过时且过时了。现在已弃用“ getAllInWindow”和“ selected”。我的代码也像最初要求的那样刷新了选项卡。 我只需要它来检查内部扩展页面,所以这是我的代码:

function goToInternalPage(targetURL) {
chrome.tabs.query({}, function(tabs) {
    for (let i = 0, tab; tab = tabs[i]; i++) {
        if (tab.url===("chrome-extension://"+ chrome.runtime.id + targetURL)) {
            chrome.tabs.reload(tab.id, {}, function(){});
            chrome.tabs.update(tab.id, {active: true});
            return;
        }
    }
    chrome.tabs.create({url: targetURL});
});

}

通用版本如下:

function goToURL(targetURL) {
chrome.tabs.query({}, function(tabs) {
    for (let i = 0, tab; tab = tabs[i]; i++) {
        if (tab.url===targetURL) {
            chrome.tabs.reload(tab.id, {}, function(){});
            chrome.tabs.update(tab.id, {active: true});
            return;
        }
    }
    chrome.tabs.create({url: targetURL});
});

}