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