V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
jchnxu
V2EX  ›  JavaScript

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

  •  
  •   jchnxu · 2022-12-03 14:04:48 +08:00 · 2288 次点击
    这是一个创建于 751 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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-03 14:06:16 +08:00
    错误如图
    solobat
        2
    solobat  
       2022-12-03 14:17:40 +08:00
    同遇这问题,我是通过新标签页打开的时候由 content 向 background 发起一次请求来尝试激活,从而达到基本可用的程度。
    jchnxu
        3
    jchnxu  
    OP
       2022-12-03 15:21:23 +08:00
    shi'z 是这个意思么? @solobat
    kidlj
        4
    kidlj  
       2022-12-03 16:03:28 +08:00
    background scripts persistent 的目的是什么,是要保存状态或缓存吗?如果是的话,可以把它做成无状态的,把状态写进 local storage ,service worker 启动的时候读取状态。
    jchnxu
        5
    jchnxu  
    OP
       2022-12-03 16:15:42 +08:00
    @kidlj 好问题,我是做了一个网页黑名单,符合某些规则的网页就不让打开。所以基本上只要 onActivated & onUpdated 正常 fire 就能满足我的需求。

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

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

    chrome.webNavigation.onHistoryStateUpdated.addListener((details) => {
    console.log('wake me up');
    });
    solobat
        10
    solobat  
       2022-12-05 23:32:18 +08:00
    @jchnxu 行,我试试,感谢分享
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:14 · PVG 04:14 · LAX 12:14 · JFK 15:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.