我有一个Chrome扩展程序,可添加浏览器按钮。浏览器按钮有1个自定义上下文菜单项,“禁用DOMAIN ”或“重新启用DOMAIN ”。这是2个变量,具体取决于活动选项卡:启用/禁用及其域名。
我使用chrome.tabs.onUpdated
跟踪新标签,chrome.tabs.onActivated
跟踪标签切换。当发生任何一种情况时,我会根据这2个变量更新标签。例如。 “重新启用twitter.com ”或“停用google.com ”。
如果您有多个窗口,则会出现问题:
另一种情况是打开devtools,它会在所有窗口的所有标签中将所有DOMAIN
更改为devtools
。
如何区分窗口?有1个浏览器操作PER窗口,但只有1个要更改的contextmenu标签(将其全部更改)。也无法知道哪个窗口处于活动状态/我正在点击哪个窗口的浏览量。切换窗口没有标签事件,因此我无法更改标签。
我正在检查AdBlock的代码,但它有同样的错误:如果你打开一个禁用AdBlock的新窗口,它会删除所有窗口上的上下文菜单项,并且在切换标签之前不会将它们放回去({{1 }})。
选中事件代码,如果有帮助:
onActivated
相关的Chromium bug:https://code.google.com/p/chromium/issues/detail?id=469417
答案 0 :(得分:2)
哦,当然有一个API :chrome.windows
。笨
chrome.windows.onFocusChanged.addListener(function(windowId) {
chrome.windows.get(windowId, {"populate": true}, function(window) {
var e = chrome.runtime.lastError; // Stut up, Chrome
if ( !window ) return;
console.log('onFocusChanged', windowId, window);
for ( var i=window.tabs.length-1; i>=0; i-- ) {
var tab = window.tabs[i];
if ( tab.active ) {
updateLabelStatus(tab);
break;
}
};
});
});
同样重要的是:updateLabel()
我在没有指定chrome.browserAction.setBadgeBackgroundColor
的情况下做了一些tabId
,但没有它,它会改变所有窗口打开标签的bgcolor。
嗯,调试3小时并不好玩。 (其中2.5我不知道chrome.windows
,该死的!)
答案 1 :(得分:0)
更简单的解决方案是在调用tabId
(browserAction
,setBadgeText
,setBadgeBackgroundColor
等)时传递setIcon
,如documentation