【发布时间】: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