当我这样做时:
var a = 'moz-extension://c5b86449-4457-4a39-a758-958faf23fc72/popup.html'
chrome.tabs.query({ url: a }, function(x){});
我收到错误:
Invalid match pattern: 'moz-extension://c5b86449-4457-4a39-a758-958faf23fc72/popup.html'
SingleMatchPattern() MatchPattern.jsm:49
this.MatchPattern() MatchPattern.jsm:103
self.tabs.query() ext-tabs.js:556
callAsyncFunction() Extension.jsm:422
inject/stub() Schemas.jsm:1002
但是,这是我需要在chrome.tabs.query
电话中匹配的网址。
有什么建议吗?
答案 0 :(得分:2)
在Firefox v48中,不再显示错误消息,但尚不支持moz-extension:...
协议。
chrome.tabs.query
那样搜索,则 0
会在x.length
中返回"url": "moz-extension:..."
,请参阅示例:
chrome.tabs.query({ url: "moz-extension://..." }, function(x){
console.log(x.length);
});
但是有另一种解决问题的方法,您可以在没有“url:”参数的情况下搜索所有标签,请参阅以下示例:
function getTab(pageFromAddon, callback)
{
var uri = chrome.extension.getURL(pageFromAddon);
chrome.tabs.query({}, function(tabs) {
var tabData;
if (tabs && tabs.length) {
for (var i = tabs.length - 1; i >= 0; i--) {
if (tabs[i].url === uri) {
tabData = tabs[i];
break;
}
}
}
callback(tabData);
});
}
用法:
//get id, url, title and other info from tab (or false)
console.log(getTab("view/page.html"));
function openOrUpdateTab(pageFromAddon)
{
var uri = chrome.extension.getURL(url);
chrome.tabs.query({}, function(tabs) {
var tabId;
if (tabs && tabs.length) {
for (var i = tabs.length - 1; i >= 0; i--) {
if (tabs[i].url === uri) {
tabId = tabs[i].id;
break;
}
}
}
if (tabId) {
chrome.tabs.update(tabId, { "active": true });
} else {
chrome.tabs.create({ "url": uri });
}
});
return uri;
}
用法:
//If openned refresh tab, if not create new tab
var id = openOrUpdateTab("view/page.html");
//get url from new or refreshed tab
console.log(url);
要使用这些功能,您需要将"tabs"
添加到permissions:
(manifest.json
),如下所示:
...
"permissions": [
"<all_urls>",
"tabs"
]
}