我需要在我的 Chrome 扩展程序中将我的 Service Worker 定义为持久的,因为我使用 webRequest API 来拦截在表单中为特定请求传递的一些数据,但我不知道如何做到这一点。我已经尝试了所有方法,但我的 Service Worker 一直在卸载。
如何保持加载并等待请求被拦截?
javascript google-chrome xmlhttprequest request google-chrome-extension
我想构建一个行为类似于计时器的扩展。激活后,它应该倒计时秒数,但是不激活时,它什么也不做。
该chrome.alarmsAPI很有趣,但是没有足够的精度或粒度。每分钟最多只能发射一次,并且可能发射得晚。如果我想让某个东西执行得更多,那我就不能使用这个API。
然后,接下来自然的解决方案是使用一个背景页和使用setTimeout或setInterval在那里。但是,后台页面是持久性的,即使空闲时它们也会占用资源(例如内存)。因此它们并不理想。
最好的解决方案似乎是运行计时器的事件页。但是,文档说:
加载事件页面后,事件页面只要处于活动状态(例如,调用扩展API或发出网络请求),就将一直保持运行状态。
[…]
一旦事件页面闲置了短时间(几秒钟),就会调度runtime.onSuspend事件。在事件被强行卸载之前,事件页面还有几秒钟的时间来处理该事件。
[…]
如果您的扩展程序使用
window.setTimeout()或window.setInterval(),请改用Alarms API。如果事件页面关闭,基于DOM的计时器将不被接受。
不幸的是,拥有一个活动setInterval还不足以认为一个事件页面处于活动状态。实际上,根据我的测试,最多10秒的间隔足以使事件页面保持运行状态,但是大于10或15秒的时间间隔太远,事件页面将被卸载。我已经在crx-reload-tab项目中对此进行了测试。
我相信我想要的是中间立场:
可能吗?我该怎么做?
我正在尝试创建一个Feed阅读器,每小时左右检查一次Feed的更新版本.
我的问题是,事件页面似乎在不到20秒后变为非活动状态.
如何让它持续更长时间?
以下是代码的一些重要部分:
在manifest.json中:
"background": {
"scripts": ["eventPage.js"],
"persistent": false
},
Run Code Online (Sandbox Code Playgroud)
并在eventPage.js中:
function testFunc () {
alert("test")
}
setInterval(testFunc, 10 * 1000) // was testing the number of seconds here
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
谢谢!
问候,
约翰