SuperAPI AI 工具集

building-browser-extensions

编程与开发

查看项目

更新于 10-16 04:17

技能介绍

用途

本技能用于构建和测试 Manifest V3 浏览器扩展,重点解决 MV3 后台 service worker 被浏览器在空闲时回收所引发的一系列静默缺陷。这些缺陷通常不会崩溃、不会在用户面前报错,只会表现为设置回退、按钮无响应,或测试套件在损坏的处理器上仍然全绿。

主要能力

异步消息通道

MV3 的 onMessage 在监听器返回时即关闭回复通道,除非返回字面量 true。异步响应必须返回 true 以保持通道打开,并在成功与失败两条路径上都回复。调用方应 await 响应,而不是用 setTimeout 猜测写入已完成。缺失或假值的 sendMessage 响应应视为失败,因为被回收的 worker 会让 sendMessage 解析为 undefined。

数值设置与存储安全

数值设置应使用 ?? 而非 ||,因为 0 对小时、计数或偏移量是合法值。chrome.storage 的读-改-写存在丢失更新问题:get → 修改 → set 整个设置对象会与 popup、worker、选项页等其他上下文产生竞争。应在写入路径内重新读取,并基于 DEFAULTS 重建而非基于当前快照;嵌套对象需显式合并,避免浅拷贝别名共享模块全局对象。选择逻辑应保持纯函数,持久化作为单独的 await 调用。

入口点与校验

同一代码路径服务定时任务和手动按钮时,应通过显式标志区分,默认值取安全值(定时任务受时间检查约束,手动入口传 true 绕过)。HTML 的 min/max 约束仅在表单提交或显式 checkValidity() 时生效,popup 点击处理器读取 .value 时不会触发校验,需在 JS 中校验整个字符串后再转换,拒绝空白、小数、尾随文本、负数及超范围输入。

截止时间与 popup 初始化

存储的截止时间需校验为安全整数且在 Date 可表示范围内,过期判断使用严格 >。popup 初始化应先绑定监听器,再在 try/catch 中加载状态并降级到默认值,避免状态加载抛错导致所有按钮失效。

测试与 CI

chrome mock 是系统被测部分:重置助手需重新安装默认实现而非仅 clearAllMocks;mock 需支持异步响应;同步 mock 存储无法检测缺失的 await,需门控写入并证明处理器仍处于 pending 状态;多步副作用需门控最终 promise 而非仅早期步骤;假定时器不可中途换回真实定时器。PR 评论 CI 步骤需要 issues: write 和 pull-requests: write 两项权限,且事件条件为 opened 的步骤在 synchronize 时会被跳过。

使用方式

资料未提供具体安装命令或调用方式。

适用场景

适用于开发、调试和测试 Manifest V3 浏览器扩展,尤其是涉及 service worker 生命周期、chrome.storage 并发写入、消息通道异步响应、设置校验和 popup 初始化的场景。

限制

资料未提供关于收费、价格、平台支持范围或效果保证的信息。