📄 一句话概括
架构就是分工:五个零件各管一段,想清【这件事归谁管】比想清【这段代码怎么写】重要得多。
📝 本节和前面几节的关系
上一节把空壳搭起来了;这一节给空壳里的零件分好工,后面写代码才不会乱。
一、五个零件,各管一段
manifest:声明这个扩展是谁、要什么权限。 service worker:后台的事件处理,随事件唤醒,你看不见它。 content script:注入到网页里,只有它能读改页面内容。 popup:点图标弹出的小窗口。options:设置页。
二、一条完整的数据流
【一键存成 Markdown】走一遍:点图标 → popup 弹出 → 发消息。 → content script 收到、读正文 → 转成 Markdown 回传 → popup 触发下载。 关键在第三步:读网页这件事只有 content script 干得了。 popup 是独立的小窗口,它看不到页面内容——想不清这层,就会卡在【怎么拿不到数据】。
三、先定分工,再写代码
把五个零件一次讲给它听,让它按这个分工写。 零件之间的边界写清楚:谁能读网页、谁负责发消息、谁负责存文件。 这样后面调试时,你一问【这归哪个零件管】就能定位到文件。
四、架构错了会怎样
最常见的错:把该 content script 做的事写进 popup——运行起来就是找不到。 第二种:把状态存在 popup 里——popup 一关就没了,下次打开全丢。 所以架构不是写代码的副产品,它是先想清楚、再动手的那一步。
五、动手 Demo:Phase 2——五个零件,各管一段
下面把五个零件、各自负责的事、以及你什么时候能看见它排开。
TH([u"零件", u"它负责", u"谁看得到它"], [20, 36, 26])
T([u"content script", u"注入到网页里,读改页面内容", u"用户点开网页时"],
[20, 36, 26])
T([u"popup", u"点图标弹出的小窗口", u"用户点图标时"], [20, 36, 26])
实跑输出:
--------------------------------------------------------------------
Phase 2——五个零件,各管一段
--------------------------------------------------------------------
扩展的架构不复杂,**五个零件,各管一段**:
零件 它负责 谁看得到它
-----------------------------------------------------------------------
manifest.json 声明这个扩展是谁、要什么权限 它自己
service worker 在后台跑的事件处理,随事件唤醒 你看不见,靠日志
content script 注入到网页里,读改页面内容 用户点开网页时
popup 点图标弹出的小窗口 用户点图标时
options 设置页,配置项放这儿 用户主动打开时
**架构就是分工**——想清楚【这件事归哪个零件管】,
比想清楚【这段代码怎么写】重要得多。
拿【一键存成 Markdown】走一遍:
① 用户点图标 → **popup** 弹出来
② 用户点【保存】 → popup 发消息
③ **content script** 收到消息,读当前网页正文
④ 正文转成 Markdown,回传
⑤ popup 收到结果,触发下载
**注意 ③:读网页这件事只有 content script 干得了**——
popup 是独立的小窗口,**它看不到页面内容**。
想不清这一层,就会写出【popup 里怎么拿不到页面数据】这种问题。
架构就是分工——想清楚【这件事归哪个零件管】,比想清楚【代码怎么写】重要得多。 最容易踩的那条:popup 看不到页面内容,读网页的活只能交给 content script。
30 秒实验
- 把你项目的五个零件画成一张图,每条连线写一句【它传什么过去】。
- 拿你的主流程走一遍:哪一步归哪个零件管?有没有卡在 popup 拿不到数据上。
常见误区
- 把读网页的活写进 popup。popup 是独立小窗,看不到页面内容。
- 把状态存在 popup 里。popup 一关状态就没了,该放 service worker 或存储里。
自测三问(点开对答案)
1. 扩展的五个零件分别是什么? —— manifest、service worker、content script、popup、options。 2. 为什么读网页只能由 content script 做? —— popup 是独立的小窗口,看不到页面内容。 3. 为什么说架构就是分工? —— 先想清【归谁管】,调试时才能一问就定位到文件。- ☐ 下一节(12.5 Phase 3:逐个模块开发)
相关笔记
- Phase 2:正式开发(最耗时但也最有成就感的部分) — 第九章的对应阶段
- 为什么需要扩展能力 — 让工具按你的分工干活
- 🐳 DeepSeek Harness技术架构原理 · 索引 — 系统分层与模块边界的通识
- 🧡 Claude Code橙皮书 · 索引