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

问题描述 投票:2回答:1

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

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

没有tabs许可可以达到结果吗?

google-chrome-extension
1个回答
1
投票

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

要查找自己扩展的独立选项卡,请使用另一个选项卡的JS chrome.extension.getViews()上调用的chrome.tabs.getCurrent()window以获取其自己的“当前”选项卡:

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')
© www.soinside.com 2019 - 2024. All rights reserved.