页面刷新后Chrome API警报会停止

时间:2015-08-02 18:35:12

标签: javascript jquery google-chrome google-chrome-extension alarm

阅读时,我的印象是,即使在Chrome关闭,页面刷新等情况下,Chrome闹钟仍会继续有效。来自Google的一个结果:

  

使用Chrome闹钟API,您可以设置持续时间长的闹钟   即使应用程序的后台页面处于非活动状态,也会安装该应用程序。

我的问题是我在我的options.js页面中为Chrome扩展程序设置了Chrome警报。保存选项页面时会创建警报(chrome.alarms.create)。

如果我打开页面,闹钟就会起作用。但是,如果我重新加载页面(options.html),我就不再收到警报了。

以下是我的options.js

的一部分
$('#save-options-button').on('click', function() {

    //Clears existing alarm
    chrome.alarms.clearAll();

    //Create alarm
    chrome.alarms.create("fetchAlarm", {
        delayInMinutes: 1,
        periodInMinutes: 1
    });

    chrome.alarms.onAlarm.addListener(function(alarm) {
        console.log("Got an alarm!", alarm);

    });
});

1 个答案:

答案 0 :(得分:4)

我猜你引用的是Chrome Apps 文档,这就是为什么它会让人感到困惑。

意思是event pages(一种background page)将被唤醒以服务于警报事件,即使它们因闲置而被卸载。

这仅适用于 到事件/背景页面。 Chrome不会随机打开一个页面,因为过去发生过该页面收听的事件。因此,您不应将实际的事件侦听器逻辑放入UI页面(选项,弹出窗口等)

在您的情况下,刷新页面会使包含侦听器的JS上下文与其一起销毁,并且您的逻辑仅在单击后添加侦听器。即使您将addListener添加到顶级代码,它也只会在页面打开时运行。

因此,您需要添加一个后台页面来为该事件(实际的侦听器)提供服务。

背景页面通常随时可以回答事件。事件页面的特殊之处在于,Chrome会记住哪些事件应该触发其加载并且不会加载它们。您可以阅读更多相关信息in another answer of mine