🦊 启用 Firefox MV3 构建并完善 sandbox/offscreen 通信#1561
Conversation
…target audiences
诊断 Firefox MV3 offscreen<->SW 握手问题时临时加入,问题已定位并修复,探针不再需要。
|
b6329d4 修正了 定时脚本 没有自动执行的问题
在 Chrome 中,这一机制可以正常工作,因为 offscreen document 运行在独立进程中。 但在 Firefox 中, 因此,当 service worker 侧调用:
消息无法到达 offscreen 侧队列的监听器,因为两个队列都位于同一个发送者 Frame 中。 cron 调度机制本身没有问题。使用 两种执行方式的差异如下: 手动运行通过 自动调度依赖
该消息需要触发
但在 Firefox 中,这条广播无法到达,因此 实际问题不是“任务执行一次后停止”,而是任务从一开始就没有完成调度。 同一问题还会导致以下消息无法同步到 Firefox 的 sandbox:
这些失败不会产生明显错误,因此容易被忽略。 修复方案为 这样不会影响 Chrome 的
共享同一个 新增测试覆盖以下场景:
|
因此 Firefox MV3版 用了 WebRequest blocking 来避免 Event Page 被 kill 掉 (定时脚本需要这个设计) mozilla 不接受再处理吧 |
Checklist / 检查清单
Description / 描述
本 PR 启用 ScriptCat 的 Firefox MV3 构建,并修复 Firefox 下 sandbox、event page 与 Service Worker 之间的启动时序和跨上下文通信问题。
主要改动
启用 Firefox MV3 打包
sandbox配置,并补充 sandbox CSP。154.0a1,以匹配 manifest sandbox 支持。重构 sandbox/offscreen 就绪流程
preparationSandbox,不再由父层猜测、轮询或伪造就绪状态。getExtensionEnv请求执行非阻塞通道自检,并将检测结果上报到父层日志。修复 Firefox 下的消息通道问题
InProcessMessage处理 offscreen → Service Worker 通信,避免chrome.runtime.sendMessage向自身发送时出现Receiving end does not exist。WindowMessage支持惰性解析目标窗口,避免 iframe 尚处于about:blank时过早缓存contentWindow,导致导航到跨源 sandbox 页面后消息来源匹配失败。MessageQueue.publish()主动捕获无接收方时 Firefox 返回的 rejected Promise,避免产生未处理的 Promise rejection。补充测试与文档
兼容性说明
154.0a1或更高版本。验证
tsc --noEmiteslintprettier --checkScreenshots / 截图
不适用:本 PR 仅涉及构建配置、启动协议和内部消息通信。