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