jchnxu
V2EX  ›  JavaScript

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

By jchnxu at 2022 年 12 月 3 日 · 3530 次点击
https://stackoverflow.com/questions/66618136/persistent-service-worker-in-chrome-extension

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

现在的问题是,如果 service worker inactive 这两函数就不会 fire 了
kidlj
   6
kidlj  
   2022 年 12 月 3 日
我没用过,不过 webRequest api 能实现需求吗?

https://developer.chrome.com/docs/extensions/reference/webRequest/
jchnxu
   7
jchnxu  
OP
   2022 年 12 月 3 日
@kidlj 同样的道理,你的 worker 没有了 -> 所有的 handler 都没了
solobat
   8
solobat  
   2022 年 12 月 3 日
@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
   9
jchnxu  
OP
   2022 年 12 月 5 日
@solobat 我试了一下这一条好像让我两天都没被杀掉了。我不太清楚原理,你试试?

chrome.webNavigation.onHistoryStateUpdated.addListener((details) => {
console.log('wake me up');
});
solobat
   10
solobat  
   2022 年 12 月 5 日
@jchnxu 行,我试试,感谢分享
推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
© 2026 V2EX · 32ms · 3.9.8.5