阻止 Chrome 扩展程序的弹出窗口.html自行打开

Preventing a Chrome extension's popup.html from opening itself

本文关键字:html 窗口 扩展 Chrome 程序 阻止      更新时间:2023-09-26

我正在创建一个Chrome扩展程序,该扩展程序具有一个background.html文件,该文件每分钟从API请求一次信息。收到信息后,它会popup.html JSON 信息发送消息,弹出窗口使用该信息将新的 HTML 元素附加到弹出窗口的正文中。

问题是后台一直在运行(应该),但即使弹出窗口关闭,它也会ping弹出窗口。这会导致弹出窗口每分钟自行打开一次,这非常烦人。

我想知道,有没有办法查看弹出窗口是否关闭并且在这种情况下不执行任何操作?或者有没有另一种方法可以防止弹出窗口自行打开?

这是Github存储库,但下面突出显示了重要部分。

以下是我ping弹出窗口的方式:

// background.js
function sendQuestions()                                                                                                                                                                                    
{                                                                                                                                                                                                           
    var questions = JSON.parse(db.getItem(storage));                                                                                                                                                        
    chrome.extension.sendRequest(appid, { 'questions': questions }, function() {});                                                                                                                         
}  
setInterval(sendQuestions, 60e3);

以下是弹出窗口的处理方式:

// popup.js
chrome.extension.onRequest.addListener(function(request) {                                                                                                                                                  
    if (request.questions) {                                                                                                                                                                                
        displayQuestions(request.questions);                                                                                                                                                                
    }
});
function displayQuestions(questions)                                                                                                                                                                        
{     
    for (i = 0; i < questions.length; i++) {                                                                                                                                                                
        var question = questions[i];  
        var htmlBlock = // ... generate a block of html ...
        $('#container').prepend(htmlBlock);
    }
}

在弹出窗口打开时打开从弹出窗口到background_page的长寿命连接。在background_page中,您可以检查连接当前是否处于活动状态。如果是传递必要的消息,否则请等待连接处于活动状态。