第七部分 — 存储 chrome.storage(本地/同步/会话)+ 配额

15.1 目的

服务工作者(SW)可能在空闲时被关闭。 持久化状态必须存于全局变量之外。

chrome.storage 是默认的持久化存储。

15.2 使用场景 / 应避免使用场景

使用场景: 设置、小型状态、标志、缓存元数据。

应避免使用场景: 大型二进制对象(请使用 IndexedDB 或外部存储)。

15.3 最小示例

权限:

  • storage

服务工作者(SW): CODE_BLOCK_64

15.4 本地 vs 同步 vs 会话

  • local: 最大/最快,每个设备独立

  • sync: 用户同步的,配额和写入速率受限

  • session: 在扩展加载期间内存中(重启软件保护程序后保留;在扩展重新加载/更新/禁用或浏览器重启时清除)

最小示例

一个最小的 MV3 安全异步消息处理程序(适合作为模板):

javascript 复制代码
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  (async () => {
    if (msg?.type !== "PING") return;
    sendResponse({ ok: true });
  })().catch((err) => sendResponse({ ok: false, error: String(err) }));
  return true; // keep channel open for async
});

15.5 常见问题

  • 将 sync 视作数据库(配额错误和写入速率限制)

  • 忘记在 .get({defaults}) 中设置默认值

  • 认为"体积小"而忽略检查文档中的配额(每个键的项数和总字节数会因区域不同而异)

  • 写入过于频繁(采用防抖技术 + 批量写入;特别是在 sync 情况下)

  • 假设 storage.session 对内容脚本默认可用 (它并不总是可用;如果必须使用,请调用 setAccessLevel())

15.6 检查清单

  • 选择合适的存储区域(本地/同步/会话)

  • 始终带默认值读取

  • 处理配额错误(尤其是同步情况)

15.7 参考资料

相关推荐
IT_陈寒3 小时前
Java中equals方法比了个寂寞?原来这才是正确的重写姿势
前端·人工智能·后端
默_笙3 小时前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
CopyCode3 小时前
用 AI 迁项目有多爽?我把 Webpack 迁 Vite 的全过程记下来了
前端·架构
去伪存真3 小时前
Electron 自动化发布指南:GitHub Actions 跨平台打包全纪录
前端·electron
计算机魔术师3 小时前
OpenAI智能体失控闯进美国政府网站,53张用户图片外泄背后
前端
颜进强3 小时前
14 · NestJS ExecutionContext 执行上下文:守卫、拦截器、过滤器拿到的"同一个 context",为什么能力不一样?
前端·后端·ai编程
程序员Flycan3 小时前
🚀 跨域终结者:前端代理服务器(Proxy)原理解析与配置总结
前端
怕浪猫3 小时前
顶级模型一句话,AI 写出了能玩的 QQ飞车
前端·面试·github
huakoh3 小时前
MCP 报错分不清?先看响应里是 result 还是 error
前端
呃呃呃呃ex3 小时前
10. 现代前端工程化:ES6 React 项目实战与原理解析
前端·javascript