Shared Storage 不支持跨站点直接共享,仅限当前 origin 读写;各站点数据完全隔离,无 getAcrossOrigins() 方法;聚合需各站上报至可信后端统一处理。

Shared Storage 不是“创建出来就能跨站共享”的存储空间,它默认只对当前 origin 有效;所谓“跨站”是靠浏览器在隐私沙箱中统一管理多个站点的独立实例,并通过 Worklet 和可信后端协作实现——不是靠前端代码直接读别人的数据。
sharedStorage.set() 和 get() 只作用于当前 origin
你调用 sharedStorage.set("user_score", "87"),存进去的只是 https://a.example.com 自己的那一份;b.example.com 即使也执行了完全一样的语句,它的值彼此完全隔离,互不可见。
- 没有
sharedStorage.getAcrossOrigins()或类似方法,浏览器明确禁止跨 origin 直接访问 -
sharedStorage.get("user_score")永远只返回当前页面所在 origin 的值,哪怕其他合作站点用了同名 key,你也拿不到 - 如果误以为 set 后“所有合作方都能立刻读到”,会在调试时发现数据始终为空或旧值——这是最常见的迷思起点
entries() 返回的是本 origin 的字符串键值对迭代器
sharedStorage.entries() 看起来像能遍历全部数据,但它只返回当前 origin 下通过 set() 写入的条目,且 value 是原始字符串,不自动解析 JSON 或数字。
- 返回的每个
[key, value]都是string类型,比如["click_count", "12"],需手动JSON.parse()或parseInt() - 它不会合并、排序或过滤其他站点的数据,更不会跨 origin 联合遍历
- 若想统计“所有合作站点的点击总和”,必须各自调用
sharedStorage.get("click_count"),再把结果发到后端聚合——SharedStorage 本身不提供聚合能力
WorkletSharedStorage 必须配合注册的 Worklet 模块使用
Shared Storage 的核心操作(尤其是涉及跨上下文或隐私敏感逻辑)必须放在注册的 Worklet 中执行,不能在主线程直接处理敏感计算。
立即学习“前端免费学习笔记(深入)”;
- 先用
sharedStorage.worklet.addModule("stats-worklet.js")注册模块,再在其中调用sharedStorage.set()或get() - Worklet 运行在隔离环境,无法访问
window、document或主线程变量,传参只能靠registerProperty()或消息机制 - 如果跳过 Worklet 直接在页面脚本里大量调用
sharedStorage.set(),很快会触发remainingBudget()耗尽(每次操作扣 1 点,初始约 1000 点),导致后续写入静默失败
Chrome 115+ 支持,Firefox 和 Safari 当前不支持
Shared Storage 是 Chrome 主导推进的 Privacy Sandbox 组件,目前仅在 Chrome 115+ 和 Edge 115+ 中完整可用;Firefox 和 Safari 明确暂未实现,也没有公开路线图。
- 检测支持需用
if ("sharedStorage" in window),而不是检查localStorage那类通用 API - 不要把 Shared Storage 当作 localStorage 的“升级版”来 polyfill——两者设计目标完全不同:前者为跨站协作建模,后者为同源持久化服务
- 若业务需兼容 Safari/Firefox,必须准备降级方案(如 server-side 聚合 + 第一方 cookie 或 token 化标识)
真正容易被忽略的一点是:Shared Storage 的“跨站”不是靠前端打通,而是靠各站各自写、各自报、后端统一算。任何试图绕过后端、纯前端实现跨 origin 聚合的思路,都会撞上浏览器的硬性隔离边界。


















