2010-12-08 97 views
7

基本上,我有一个打包的Web应用程序,如果打开其他任何Web应用程序实例,我希望能够检查它,如果是,则切换到打开的实例,而不是创造另一个。如何检查Google Chrome中是否已经打开特定页面?

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

我一直在阅读关于chrome.tabs JavaScript模块的documentation,但我无法弄清楚如何让该函数查找特定的选项卡。我不太明白如何查找或设置特定标签的标签ID。我想这是怎么做我想要的,但如果我吠叫错了树,请让我知道。

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

回答

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传递给更新函数以便操纵它。

+0

+1完美的例子 – Kranu 2010-12-08 07:07:47

3

要使用第2版的清单使乔希李的回答工作,你必须允许添加到manifest.json文件中的选项卡:

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

我不知道这样的结构如何增加“安全”到网...

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}); 
    }); 
0

以防万一有人打算使用上面的例子中,“选择”选项已经因为Chrome的33弃用,用“突出”选项,而不是。

相关问题