简而言之:你不能按照你描述的方式去做。
当设置弹出页面时,chrome.browserAction.onClicked
不会触发,并且会显示弹出窗口。
当未设置弹出页面时,您的事件侦听器将执行,但您无法以编程方式显示弹出窗口 https://stackoverflow.com/questions/12868386/google-chrome-extension-programmatically-open-popup。你最多能做的就是set下次点击的弹出窗口。
那么,该怎么办呢?
1)你可以做一个丑陋的黑客(有点)在埃德温的答案中描述。始终显示弹出窗口,尽快检查情况,向后台发送消息并执行window.close()
如果满足条件。
当然,它很丑。
2) 执行此操作的正确方法只要条件可能发生变化,就会更新弹出窗口。也就是说,每当您添加/删除数据时pcTabs
,您应该设置/取消设置弹出窗口chrome.browserAction.setPopup https://developer.chrome.com/extensions/browserAction#method-setPopup
// ... somewhere ...
pcTabs.push(/*...*/);
chrome.browserAction.setPopup({popup: ''});
// ... somewhere else ...
pcTabs.pop(/*...*/);
if(!pcTabs.length) chrome.browserAction.setPopup({popup: 'popup.html'});
chrome.browserAction.onClicked.addListener(function() {
// Assume condition is met, popup didn't show
});
3) The fancy方法是使用实验性的 JavaScript 方法,Array.observe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe,仅 Chrome 支持。
var pcTabs = [];
Array.observe(pcTabs, function(changes) {
changes.forEach(function(change) {
if(change.object.length) {
chrome.browserAction.setPopup({popup: ''});
} else {
chrome.browserAction.setPopup({popup: 'popup.html'});
}
});
});