【问题标题】:Preventing a Chrome extension's popup.html from opening itself防止 Chrome 扩展 popup.html 自行打开
【发布时间】:2011-05-19 18:10:36
【问题描述】:

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

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

我想知道,有没有办法查看弹出窗口是否已关闭,如果是这种情况则不执行任何操作?还是有其他方法可以防止弹出窗口自行打开?

这里是Github repository,但下面突出显示了重要部分。

我是这样 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);
    }
}

【问题讨论】:

  • 你能说明你是如何 ping 弹出窗口的吗?如果它导致弹出窗口打开,那将是很棒的 AFAIK,之前不可能以编程方式打开它:)
  • 我在popup.html中添加了一个变量isPopup = true,然后使用了来自background.html的getViews,然后检查每个视图是否有isPopup属性。在这种情况下,弹出窗口会打开,否则不会。 code.google.com/chrome/extensions/…
  • @pimvbd 通信只在popup.html 和background.html 之间,所以我知道谁是谁。不过,有没有办法告诉弹出窗口当前已从后台关闭?在这种情况下,我可以使用该布尔值来阻止后台发送消息。
  • @Gisborne:嗯,getViews 只返回当前打开的窗口,即总是 bg,有时是弹出窗口。只需检查任何返回的窗口是否包含isPopup 属性,您就知道弹出窗口是否打开。
  • 哦,我明白了!我马上试试。

标签: javascript jquery google-chrome-extension


【解决方案1】:

无论何时打开一个长 lived connection 从弹出窗口到 background_page。在 background_page 中,您可以检查连接当前是否处于活动状态。如果它通过了必要的消息,否则等待连接激活。

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多