Chrome扩展程序-找出扩展程序选项卡是否打开

时间:2020-02-22 22:10:13

标签: google-chrome-extension

我已设置为单击extn图标时-我的extn index.html打开。
如果我再次单击该图标-我不希望它打开第二个选项卡。我希望它聚焦已打开的选项卡(如果已打开)。

问题出在if it's open部分。理想情况下,我不想要求获得tabs许可,因为它很麻烦。由于此限制,我无法遍历所有打开的选项卡并检查其URL。
我尝试将extn选项卡ID存储在chrome.local.storage中,并在单击extn按钮时检查它-但是始终保持最新的选项卡号非常困难。最终的障碍是,当Chrome关闭时-它不会触发任何类型的onClose事件;因此我无法清除现在过时的extn标签ID的本地存储。
因此,当我重新打开Chrome时,请点击extn按钮-它不会打开新标签页,因为它可以看到存储中的旧标签页ID,并认为该标签页已经打开。

有没有获得tabs权限的结果?

1 个答案:

答案 0 :(得分:2)

对于chrome://extensions UI中显示的嵌入式选项,您可以简单地使用chrome.runtime.openOptionsPage()来重新调整现有标签的焦点。

要找到您自己扩展的独立标签,请使用在另一个标签的JS window上调用的chrome.extension.getViews()chrome.tabs.getCurrent()来获得自己的“当前”标签:

function getOwnTabs() {
  return Promise.all(
    chrome.extension.getViews({type: 'tab'})
      .map(view =>
        new Promise(resolve =>
          view.chrome.tabs.getCurrent(tab =>
            resolve(Object.assign(tab, {url: view.location.href}))))));
}

async function openOptions(url) {
  const ownTabs = await getOwnTabs();
  const tab = ownTabs.find(tab => tab.url.includes(url));
  if (tab) {
    chrome.tabs.update(tab.id, {active: true});
  } else {
    chrome.tabs.create({url});
  }
}

用法:

openOptions('index.html')
相关问题