当我这样做时:
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
调用中匹配的 URL。
有什么建议吗?
最佳答案
在 Firefox v48 中,错误消息不再出现,但尚不支持 moz-extension:...
协议(protocol)。
chrome.tabs.query
如果像这样搜索"url": "moz-extension,则在
,参见示例:x.length
中返回 0
:..."
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"
]
}
关于javascript - Firefox WebExtension - chrome.tabs.query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36109107/