博客
Tags
# MV39
标签「MV3」下的文章
- 用 Native Messaging 在本机跑语音转写:三道消息上限,和「搬代码要搬判据」 约 6 分钟
扩展里做语音转写,云端要每人一个 API key,浏览器内 WASM 又太慢。最后落到 Native Messaging + 本机宿主——路上撞到的每一道墙,都是消息通道的尺寸与形状。
- 用扩展的 Service Worker 替掉一台 Puppeteer 机器人:纯 HTTP 轮询的监控看板 约 5 分钟
一台常驻服务器跑着无头浏览器抓监控数据。搬进扩展之后服务器可以关掉了——前提是想清楚哪些能搬、数据以谁为准,以及为什么面板会卡。
- all_frames: true 的代价:一个页面五个实例,模块级变量锁不住任何东西 约 5 分钟
内容脚本注入每个 frame,于是你的模块级变量每个 frame 各一份。五份定时器一起改同一块 DOM,会产出一类极难复现的 bug——以及一条很反直觉的排查口诀。
- 一个 <base href> 引发的 CORS:我的相对路径 fetch 跑到 CDN 去了 约 3 分钟
内容脚本注入每一个 frame,而富文本编辑器的那个 iframe 带着自己的 base href。相对路径按 baseURI 解析,于是同源请求悄悄变成了跨域请求。
- MV3 扩展工程骨架:五个入口、一个 manifest,和一条「build 过了但类型是错的」 约 4 分钟
Vite + crxjs + TypeScript 的扩展工程长什么样,五个入口各管什么,以及为什么 npm run build 通过不代表类型没问题。
- MV3 Service Worker 不肯活着:alarms 有下限,Port 才是保命绳 约 5 分钟
把一台常驻的 Puppeteer 机器人搬进扩展的 Service Worker,要先接受一件事:它三十秒没事干就会被杀掉。定时、状态、重连全都得重新设计。
- 内容脚本的三个世界:为什么 DevTools 里能跑,扩展里就是拿不到 React fiber 约 6 分钟
隔离世界、主世界、扩展页面共享同一棵 DOM 却不共享 JS 堆。这个边界会制造两种方向相反的误判,以及一个必须自己造的跨世界桥。
- 把 AI 助手放进 Chrome 原生 Side Panel:瘦客户端、per-tab 绑定、360px 约 5 分钟
从网页内注入面板改成浏览器级侧栏,换来的是不抢页面空间和不被宿主重建冲掉。代价是三个必须先知道的约束。
- 【Udesk 系列】导读:一个人维护一个内测产品,要凑齐哪些零件 约 11 分钟
一个不能上架、不能开源的浏览器扩展,靠一个人做完分发、更新、鉴权、公告、更新日志、统计和排障。这是整个系列的地图。