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

时间:2014-12-20 06:34:18

标签: javascript google-chrome-extension popup

我想通过点击显示弹出窗口,但仅当条件为false时才显示。 点击扩展图标后,使用当前名称搜索选项卡。如果找到选项卡,则后台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 即可。 这是我background.js。所有代码也在存储库中。 如何将警报替换为弹出窗口?

2 个答案:

答案 0 :(得分:5)

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

设置弹出页面后,chrome.browserAction.onClicked将不会触发,弹出窗口将会显示。

如果未设置弹出页面,则会执行您的事件侦听器,但是cannot show a popup programmatically。您可以做的最多是设置下一次点击的弹出窗口。

那么,该怎么办呢?

1)你可以做一个在Edwin的回答中描述的丑陋的黑客(某种)。始终显示弹出窗口,尽快检查条件,向后台发送消息并在满足条件时执行window.close()

当然,这很难看。

2)执行此操作的正确方法将在条件可能发生变化时更新弹出窗口。也就是说,每当您从pcTabs添加/删除数据时,都应使用chrome.browserAction.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) 花哨的 方法是使用仅在Chrome中支持的实验性JavaScript方法Array.observe

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'});  
    }
  });
});

答案 1 :(得分:-1)

好的,这是我的代码:

chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
    if (!tabs[0].url.includes('google.com')) { //check if current tab is not google: if false show popup, you can just put an else at the end and do w.e with your popup
        chrome.tabs.query({currentWindow: true, url: 'https://*.google.com/*'}, function(tabs) { //since current tab is not google query tabs with google
            if (tabs.length) { //check if there are any pages with google
                chrome.tabs.highlight({tabs: tabs[0].index}, function(w) {}); //this is what I chose to do idk what you want to do but you can write w.e here
            } else { 
                chrome.tabs.create({url: 'https://google.com'}); //other wise no pages with google open one
            }
        });
    };
});