相关疑难解决方法(0)

Chrome 扩展中的持久服务工作者

我需要在我的 Chrome 扩展程序中将我的 Service Worker 定义为持久的,因为我使用 webRequest API 来拦截在表单中为特定请求传递的一些数据,但我不知道如何做到这一点。我已经尝试了所有方法,但我的 Service Worker 一直在卸载。

如何保持加载并等待请求被拦截?

javascript google-chrome xmlhttprequest request google-chrome-extension

8
推荐指数
3
解决办法
1552
查看次数

永久的按需背景页面还是无法卸载的事件页面?

我想构建一个行为类似于计时器的扩展。激活后,它应该倒计时秒数,但是不激活时,它什么也不做。

chrome.alarmsAPI很有趣,但是没有足够的精度或粒度。每分钟最多只能发射一次,并且可能发射得晚。如果我想让某个东西执行得更多,那我就不能使用这个API。

然后,接下来自然的解决方案是使用一个背景页和使用setTimeoutsetInterval在那里。但是,后台页面是持久性的,即使空闲时它们也会占用资源(例如内存)。因此它们并不理想。

最好的解决方案似乎是运行计时器的事件页。但是,文档说:

加载事件页面后事件页面只要处于活动状态(例如,调用扩展API或发出网络请求),就将一直保持运行状态

[…]

一旦事件页面闲置了短时间(几秒钟),就会调度runtime.onSuspend事件。在事件被强行卸载之前,事件页面还有几秒钟的时间来处理该事件。

[…]

如果您的扩展程序使用window.setTimeout()window.setInterval(),请改用Alarms API。如果事件页面关闭,基于DOM的计时器将不被接受。

不幸的是,拥有一个活动setInterval还不足以认为一个事件页面处于活动状态。实际上,根据我的测试,最多10秒的间隔足以使事件页面保持运行状态,但是大于10或15秒的时间间隔太远,事件页面将被卸载。我已经在crx-reload-tab项目中对此进行测试。


我相信我想要的是中间立场:

  • 我想要一个可以按需加载和卸载的背景页面。(而不是一直保持加载状态的。)
  • 我想要一个事件页面,只要我说的那样就可以在内存中持久保存;但否则可能会被卸载。(而不是由浏览器自动卸载的。)

可能吗?我该怎么做?

google-chrome-extension

6
推荐指数
1
解决办法
1161
查看次数

Chrome扩展程序 - 事件页面在不到20秒后处于非活动状态

我正在尝试创建一个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)

我究竟做错了什么?

谢谢!

问候,

约翰

google-chrome google-chrome-extension

1
推荐指数
1
解决办法
1695
查看次数