Chrome 扩展程序警报未触发

Int*_*tor 6 javascript google-chrome google-chrome-extension javascript-objects

我正在开发一个需要使用 chrome.alarms 的 Chrome 扩展。问题在于警报没有被触发,或者正在以非常不一致的行为触发。

该扩展是基于事件页面内的对象构建的,如Manifest v2中所建议的那样。另外,我在扩展程序中有选项卡事件,有时会唤醒事件页面

请帮助我创建一个chrome.alarm ,它实际上大约每n分钟触发一次,或者向我解释我做错了什么,或者提出替代方案。

您可以在下面找到相关的代码片段。

清单.json

{
  "manifest_version": 2,
  "browser_action": {
    "default_popup": "index.html"
  },
  "permissions": [
    "<all_urls>",
    "storage",
    "tabs",
    "alarms"
  ],
  "background": {
    "scripts": [
      "js/backend/monitor.js",
      "js/backend/bootstrap.js"
    ],
    "persistent": false
  }
}
Run Code Online (Sandbox Code Playgroud)

bootstrap.js

// Exaggerating with the validation on purpose
chrome.alarms.get('timeToSendToApi', function(alarm) {
  if (typeof alarm === 'undefined' || alarm.name !== 'timeToSendToApi') {
    chrome.alarms.create('timeToSendToApi', {periodInMinutes: 2});
  }
});
Main.monitor.start();
Run Code Online (Sandbox Code Playgroud)

监视器.js

Main.monitor = (function() {

  function send() {
    // Do stuff
  }    

  function tabUpdatedHandler(tabId, changeInfo, tab) {
    // Do stuff
  }

  function tabActivatedHandler(activeInfo) {
    // Do stuff
  }

  function focusLost() {
    // Do stuff
  }

  function start(callback) {
    chrome.tabs.onUpdated.addListener( tabUpdatedHandler );
    chrome.tabs.onActivated.addListener( tabActivatedHandler );
    chrome.windows.onFocusChanged.addListener( focusLost );
    chrome.alarms.onAlarm.addListener(function(alarm) {
      if(alarm.name === 'timeToSendToApi') {
        send();
      }
    });    
  }

  return {
    start: start
  };
}());
Run Code Online (Sandbox Code Playgroud)

sow*_*bug 3

您可能遇到了我们刚刚在代码中注意到的问题。大约四个月前,我们现在了解到的一项变化可能导致了您所看到的行为。鉴于您在 11 月看到了此内容,您可能在开发或金丝雀频道上。

抱歉给您带来麻烦;我们将尽快解决这个问题,并可能合并到更广泛的渠道中。

  • 这个问题在 2020 年的 Chrome 81.0.4044.138 中仍然存在。当我使用 chrome.alarms.getAll() 时,我可以获取刚刚创建的警报。但时间过去后并没有触发。 (7认同)