基本上,我有一个打包的Web应用程序,如果Web应用程序的任何其他实例打开,我希望能够检查它,如果是,那么切换到打开的实例而不是创造另一个。
此外,对于选项页面,我希望它能够检查应用程序是否已打开,如果是,则在选项页面已更改时刷新应用程序页面。
我一直在阅读有关chrome.tabs JavaScript模块的documentation,但我无法弄清楚如何让函数查找特定的标签。我不太明白如何查找或设置特定选项卡的选项卡ID。我想这就是我想做的事情,但是如果我正在咆哮错误的树,请告诉我。
如果有人在这里可以更好地为我解释,我会非常感激。
答案 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});
});
}