仅允许Chrome扩展程序的一个活动实例

时间:2013-07-19 20:00:47

标签: google-chrome-extension

我有一个Chrome扩展程序,每次只能在每个计算机的一个窗口中打开。 什么是强制执行这种情况的最佳方法?例如,是否存在将用户指向运行扩展的现有选项卡的机制,如果存在这样的选项卡?

我的清单文件的相关部分如下:

的manifest.json

{

    "manifest_version": 2,

    "browser_action": {
        "default_icon": "/img/favicon.ico",
        "popup": "main.html"
    },

    "background": {
      "scripts": ["open.js"]
    }

}

open.js内容如下:

open.js

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.create({'url': chrome.extension.getURL('test.html')}, function(tab) {
  });
});

1 个答案:

答案 0 :(得分:2)

更新已更新,还包括关注不同窗口中的标签

由于没有人在这里发布这个问题的答案,因此从问题https://github.com/Rob--W/stackexchange-notifications/blob/8947b9982cd7b9e04ccf0ef23510571f39d33c4e/Chrome/using-websocket.js#L66-L82的评论中链接到Rob W的github。

这是一个更基本的版本,用基本命令替换原始代码中的openTab()函数以打开新选项卡。

var options_url = chrome.extension.getURL('options.html');
chrome.tabs.query({
    url: options_url
}, function(tabs) {
    if (tabs.length == 0) {
        chrome.tabs.create({ url: "main.html" });
    } else {
        // If there's more than one, close all but the first
        for (var i=1; i<tabs.length; i++)
            chrome.tabs.remove(tabs[i].id);
        // And focus the options page
        chrome.tabs.update(tabs[0].id, {active: true});
        chrome.windows.update(tabs[0].windowId, {focused:true})
    }
});