chrome ext manifest v3 的 service worker (Inactive) 问题

2022-12-03 14:04:48 +08:00
 jchnxu
https://stackoverflow.com/questions/66618136/persistent-service-worker-in-chrome-extension

这里的方案基本都试过一遍,感觉都没有完全解决这个问题,进程总是过一段时间就被杀掉了。有人解决过这个问题么?
2239 次点击
所在节点    JavaScript
10 条回复
jchnxu
2022-12-03 14:06:16 +08:00
错误如图
solobat
2022-12-03 14:17:40 +08:00
同遇这问题,我是通过新标签页打开的时候由 content 向 background 发起一次请求来尝试激活,从而达到基本可用的程度。
jchnxu
2022-12-03 15:21:23 +08:00
shi'z 是这个意思么? @solobat
kidlj
2022-12-03 16:03:28 +08:00
background scripts persistent 的目的是什么,是要保存状态或缓存吗?如果是的话,可以把它做成无状态的,把状态写进 local storage ,service worker 启动的时候读取状态。
jchnxu
2022-12-03 16:15:42 +08:00
@kidlj 好问题,我是做了一个网页黑名单,符合某些规则的网页就不让打开。所以基本上只要 onActivated & onUpdated 正常 fire 就能满足我的需求。

现在的问题是,如果 service worker inactive 这两函数就不会 fire 了
kidlj
2022-12-03 16:31:47 +08:00
我没用过,不过 webRequest api 能实现需求吗?

https://developer.chrome.com/docs/extensions/reference/webRequest/
jchnxu
2022-12-03 17:44:57 +08:00
@kidlj 同样的道理,你的 worker 没有了 -> 所有的 handler 都没了
solobat
2022-12-03 21:30:48 +08:00
@jchnxu 不是,https://github.com/solobat/iHelpers/blob/master/src/pages/background/index.ts#L202
https://github.com/solobat/iHelpers/blob/master/src/pages/background/index.ts#L218

你看这两行:在 background 通过 chrome.runtime.onMessage 监听来自 content script 的消息,在回调里去做一些初始化的工作 -- 因为新页面打开的时候,我总会让 content script 向 background 发出消息,从而可以让初始化工作被执行。

我遇到的问题场景是,在任一页面里无法保证右键菜单命令的可用性,所以想出这种办法,不是很完美,但勉强可用。不一定满足你的需求。
jchnxu
2022-12-05 00:43:10 +08:00
@solobat 我试了一下这一条好像让我两天都没被杀掉了。我不太清楚原理,你试试?

chrome.webNavigation.onHistoryStateUpdated.addListener((details) => {
console.log('wake me up');
});
solobat
2022-12-05 23:32:18 +08:00
@jchnxu 行,我试试,感谢分享

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/899797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX