【问题标题】:Chrome extension: chrome.alarms not working after main window closesChrome 扩展程序:主窗口关闭后 chrome.alarms 不起作用
【发布时间】:2020-07-21 06:41:31
【问题描述】:

我想每隔几个小时使用 chrome.alarms API 检查我的扩展程序中的某个值。警报在主窗口页面打开时触发,但当主窗口关闭时警报不再触发。我的事件监听器和警报创建在后台页面上。在我的 background.js 中,我尝试让通知定期出现以测试警报。

这是我的“background.js”的相关部分:

document.addEventListener("DOMContentLoaded", function(e) {

  chrome.runtime.getBackgroundPage(function(bg) {
      bg.chrome.alarms.create("beep", {delayInMinutes: 1, periodInMinutes: 0.1} );
  });

  var opt = {
    type: "basic",
    title: "Task due",
    message: 'A task is due tomorrow.',
    iconUrl: "chrome-extension://paomcbcgpoikdcjhbanhllhdbemcjokf/Agenda_32.png",
    buttons: [
      {
      title: 'Mark as done'
      }
    ]
  }
  

  function clr() {
    chrome.notifications.clear('tst');
  }
  
  chrome.alarms.onAlarm.addListener(function(alarm) {
    console.log("beeep");
    clr();
    chrome.notifications.create('tst', opt);
  });
});

我怎样才能使警报即使在我的主窗口关闭后也能触发?我已经阅读了一些关于此的文档,但我没有找到解决方案。

【问题讨论】:

    标签: javascript google-chrome-extension


    【解决方案1】:

    仅当用户配置文件的至少一个浏览器窗口正在运行时,扩展才会运行,除非您在 manifest.json 中特别添加 permission

    "permissions": ["background"],
    "background": {
      "persistent": true,
      "scripts": ["bg.js"]
    }
    

    让 Chrome 提早启动和延迟关闭,从而延长应用和扩展程序的使用寿命。

    当任何已安装的托管应用、打包应用或扩展程序具有“后台”权限时,Chrome 会在用户登录其计算机后立即(不可见地)运行 - 在用户启动 Chrome 之前。 “后台”权限还可以让 Chrome 继续运行(即使在其最后一个窗口关闭之后),直到用户明确退出 Chrome。

    重要!

    确保在 Chrome 设置中启用Continue running background apps

    【讨论】:

    • 在不开启“persistent”的情况下是否可以实现此功能:是吗?我读到最佳实践使用 "persistent": false 来节省内存使用量。
    • AFAIK 只有持久化脚本才能做到这一点。无论它是否坏,取决于您的扩展程序多久唤醒一次。如果每天 1000 次,那么 persistent:false 对整体性能和功耗都会不利。文档中没有提到这一点,因为这是一个非常不便的事实。
    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2012-06-03
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多