3

我正在为实时产品开发浏览器扩展。我有一个在 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
  },

谢谢!

4

2 回答 2

6

根据 chrome 文档,您应该改用警报 API。我不知道它是否能解决问题,但绝对值得一试!

我引用:

如果您的扩展程序使用 window.setTimeout() 或 window.setInterval(),请改用警报 API。如果事件页面关闭,则不会使用基于 DOM 的计时器。

https://web.archive.org/web/20130715023501/http://developer.chrome.com/extensions/event_pages.html

=> https://developer.chrome.com/docs/extensions/reference/alarms/

于 2013-08-08T21:38:22.330 回答
1

对于其他寻找解决方案的人,我最终实现了@Pluto 的建议:

"Store the intervalID returned from setInterval in a global variable, then when the window gains focus again, clear that interval and run setInterval again"

到目前为止,这对我来说效果很好,没有从服务器丢弃事件。

于 2013-08-28T18:38:26.870 回答