返回知识库

浏览器插件 · 扩展的组成

后台脚本Background Service Worker

后台脚本(Service Worker)在后台监听事件、转发消息,但闲置约 30 秒就会被休眠,全局变量和 setTimeout 随之清空。状态存 storage,定时用 alarms。

收藏几条,闲置一分钟,再看计数

网页里的内容脚本把收藏消息发给后台,弹出页再去后台问计数。先用 AI 初稿走一遍:收藏、设提醒、闲置、打开弹出页;再切到改好的写法对照。

后台写法
网页里 · 内容脚本

只能发消息,存不了计数

后台 · Service Worker○ 未启动

全局变量 count = 0

提醒:未设置

  1. 还没启动
弹出页

今日收藏 —

下一步:在网页上收藏几条,内容脚本会把消息发给后台。

知识点:会睡觉的后台

计数归零和提醒丢失,都发生在后台睡着的那一刻。

  • MV3 的后台是 Service Worker:没事做约 30 秒就被浏览器休眠,有消息或事件时再唤醒。
  • 休眠会清空全局变量;醒来后脚本从头跑,所以计数从 0 开始。
  • setTimeout、setInterval 跟着后台一起睡没了;定时任务要用 chrome.alarms。
  • 要留住的状态写进 chrome.storage;事件监听要写在脚本最外层,醒来时才能马上接住消息。
  • 内容脚本、弹出页、后台各管各的变量,只能互相发消息,不能直接读对方的数据。

什么时候怀疑它、怎么让 AI 改

症状是「刚装好正常,过一会儿就不灵了」。

  • 典型症状:计数、登录状态隔一会儿就没了;定时提醒偶尔不来;点按钮第一次没反应、第二次才行。
  • 不是它的问题:网页上完全看不到扩展插入的东西——那先查内容脚本。
  1. 跟 AI 说:「后台是会休眠的 Service Worker,状态存 chrome.storage,定时用 chrome.alarms」。
  2. 验收时什么都不做等一分钟以上,再打开弹出页或触发功能。
  3. 在 chrome://extensions 点「Service Worker」链接,能看到后台的日志和报错。

正反例:同一个收藏计数

功能一样,差别只在计数存在哪。

正例计数存 storage,提醒用 alarms

后台睡多少次都没关系,醒来读回计数,到点照常提醒。

反例计数放全局变量,提醒用 setTimeout

你测试时一直在点,一切正常;用户放着不动一分钟,计数归零,提醒不来。

快速自测

用户说:「装好时番茄钟提醒很准,后来经常不响。」AI 的代码里写着 setTimeout(remind, 25 * 60 * 1000)。最可能的原因是?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。