后台脚本中的setInteval

Tru*_*nse 1 javascript google-chrome setinterval google-chrome-extension

我正在为实时产品开发浏览器扩展.我有一个后台页面,在manifest.json中设置了"persistent:true"(我使用的是版本v2).我每隔一秒使用setInterval()轮询服务器以获取新数据.后台脚本还会缓存到目前为止收集的数据,并将其提供给任何新打开的选项卡.

事情很好,直到有时我注意到当我让电脑长时间睡眠时,我对服务器的调查就停止了!如果我刷新了任何现有选项卡,我确实看到了缓存数据.这意味着,后台页面未被Chrome杀死.我的问题是,为什么chrome只是停止setInterval()调用?此外,如果由于某种原因停止投票,恢复投票的正确方法是什么?

//relevant part of manifest.json
  "background": {
    "scripts": [
      "js/background/jquery.min.js",
      "js/background/bgconfig.js",
      "js/background/backgroundmanager.js",
      "js/background/eventsfetcher.js"
    ],

    "persistent": true
  },
Run Code Online (Sandbox Code Playgroud)

谢谢!

Aeg*_*gis 5

根据chrome文档,您应该使用警报API.我不知道它是否会解决这个问题,但它确实值得尝试!

我引用:

如果您的扩展使用window.setTimeout()或window.setInterval(),请切换到使用警报API.如果事件页面关闭,则不会遵守基于DOM的计时器.

http://developer.chrome.com/extensions/event_pages.html

=> http://developer.chrome.com/extensions/alarms.html

  • 谢谢,但警报API只允许我在几分钟内创建警报,我需要每秒至少轮询一次. (2认同)