我有一个Chrome扩展,增加了一个浏览器按钮。浏览器按钮有一个自定义的Conext菜单项,要么“禁用域”,要么“重新启用域”。这是两个变量,取决于活动选项卡:已启用/禁用及其域名。
我使用chrome.tabs.onUpdated
跟踪新选项卡,使用chrome.tabs.onActivated
跟踪选项卡开关。无论发生哪种情况,我都会根据这两个变量更新标签。例如。“为twitter.com重新启用”或“为google.com禁用”。
当您有超过一个窗口时,问题就会发生:
另一个场景是打开devtools,它将所有窗口中所有标签中的所有DOMAIN
更改为devtools
。
如何区分窗口?每个窗口有一个浏览器操作,但只有一个contextmenu标签需要更改(这会改变所有窗口)。不可能知道哪个窗口是活动的/哪个窗口是我单击的浏览器。没有切换窗口的选项卡事件,所以我不能更改标签。
我正在签出AdBlock的代码,但它有相同的错误:如果您打开一个禁用AdBlock的新窗口,它将删除所有窗口上的contextmenu项,直到您切换制表符(onActivated
)时才会将它们放回。
选项卡事件代码,如果有帮助的话:
chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
console.log('onUpdated', tabId, info, tab);
if ( info.status && tab.active ) {
updateLabelStatus(tab);
}
});
chrome.tabs.onActivated.addListener(function(info) {
console.log('onActivated', info);
chrome.tabs.get(info.tabId, function(tab) {
updateLabelStatus(tab);
});
});
function updateLabelStatus(tab) {
var host = rweb.host(tab.url);
chrome.storage.local.get('disabled', function(items) {
var disabled = items.disabled || {};
updateLabel(host in disabled, host, tab.id);
});
}
function updateLabel(disabled, host, tabId) {
// Update label
var newLabel = labels[ Number(disabled) ].replace('DOMAIN', host);
// >> THIS IS WHERE I MIGHT WANT TO SPECIFY A WINDOW <<
chrome.contextMenus.update(browserActionMenuItemId, {"title": newLabel});
}
相关铬缺陷:https://code.google.com/p/chromium/issues/detail?id=469417
发布于 2015-03-21 07:38:24
哦,,当然有:chrome.windows
的API。太愚蠢了。
这孩子修好了:
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()
中,我做了一些没有指定tabId
的chrome.browserAction.setBadgeBackgroundColor
,但是没有它,它将更改所有窗口打开的选项卡的bgcolor。
嗯,这三个小时的调试可不好玩。(其中我不知道chrome.windows
,该死!)
https://stackoverflow.com/questions/29184242
复制相似问题