javascript - Firefox WebExtension - chrome.tabs.query

标签 javascript firefox firefox-addon-webextensions

当我这样做时:

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/

相关文章:

firefox - 如何让双向数据绑定(bind) <select> 在 Firefox 中工作

C 套接字 : Server gives firefox a downloadable file instead of firefox showing the page

javascript - 在 Firefox 扩展页面内提交表单

javascript - Firefox WebExtension,独立的 HTML 覆盖

javascript - 如何优化动态加载 HTML5 游戏世界的 Canvas 渲染?

javascript - 加载图像时显示加载 gif

javascript - 在两个 child 之间添加一个 DOM 元素

javascript - 使用 Xpath 链接进行深度链接的解决方法

javascript - _.map 返回时覆盖值

javascript - 将 ES6 javascript 函数代码转换为非 es6 代码