1. 问题描述及背景
技术方案: 插件基础包中不包含短链接通信相关代码,且,短连接通信监听放在动态层;
问题描述: 当用户页面打开时间较长后,点击页面按钮无法与Service Worker进行通信以处理业务逻辑。
2. 当年处理方案回顾
直接采用长链接通信方案:
将长链接通信代码放置在基础包中;
长链接通信断联情况下,与Service Worker重建通信通道以此唤醒Service Worker来保持Service Worker的激活状态后等待业务消息到来并处理;
未对 短连接通信激活Service Worker休眠状态的能力 进行分层调研:是否能激活休眠状态、是否可以建立短连接通信;
3. 现下调研结果
测试环境:macOS Monterey 12.6.3(版本 138.0.7204.101(正式版本) (arm64))
当Service Worker休眠后,从Content层向Service Worker发送短链接消息是可以激活Service Worker状态的;
当动态加载时,如果将chrome.runtime.onMessage.addListener监听放在动态层(l7eval5库加载js代码并执行,环境与插件执行上下文隔离),则该环境会在Service Worker休眠时被清除,导致在Service Worker休眠后,在Content层点击按钮进行短连接时,可以唤醒Service Worker但是无法与Service Worker建立短连接通信通道,进而导致功能无法使用。
4. 依据调研结果,其他可行处理方案补充说明
将短连接通信代码放置在基础包中,动态包只处理业务(因为短连接可以激活Service Worker,只要解决通信通道建立问题即可);
或者,在Service Worker激活时重新执行一次动态代码(这个不太建议,因为处理逻辑会比较复杂)。












