Chrome 扩展程序弹出窗口按条件显示

2023-12-31

我想通过点击显示弹出窗口,但前提是条件为假。 单击扩展图标后台 js 后,搜索具有当前名称的选项卡。如果选项卡找到后台js继续工作。如果没有找到 - 我想显示带有说明的弹出窗口。无法理解如何在这种情况下仅显示弹出窗口。 我可以通过 browserAction.setPopup() 设置弹出窗口,但只有在下次单击后才会显示弹出窗口。 我只想显示一次我的弹出窗口。 这绝对是可能的,我在其他扩展上看到过这种行为。

var pcTabs; // tabs array

chrome.browserAction.onClicked.addListener(buttonClick);

function buttonClick() {
 // getting tabs...
 if(pcTabs.length != 0){
    // working with finded tabs
 } else{ // tabs not found
    // show popup.html here. this is the question
 }
}

upd。 这是我的背景.js https://github.com/illuzor/Play-Button-For-Pocket-Casts/blob/master/source/background.js。所有代码也在存储库中。 如何将警报替换为弹出窗口?


简而言之:你不能按照你描述的方式去做。

当设置弹出页面时,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'});  
    }
  });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chrome 扩展程序弹出窗口按条件显示 的相关文章