Storage 事件:跨标签一致性与隐私边界
使用 storage 事件更新同源界面,同时遵守写入窗口排除、分区、时序和隐私边界。
BotBrowser Team
storage 事件是 Web Storage 变化通知,不是共享事务。一个 Window 修改 localStorage 后,同源的其他可用 Document 可能收到事件,但执行写入的 Window 不会收到自己的事件。来源、上下文和存储分区决定可见范围。缺失事件不能证明另一标签不存在,收到事件也不能证明身份、持久性、顺序或无竞争状态。BotBrowser 支持提供隔离 profile 夹具并记录跨上下文可见结果,但不会暴露其他来源的存储,也不保证无竞争、事件顺序或关闭后的持久性。
TL;DR
localStorage变化可以通知同源的其他 Document。- 执行写入的 Window 不会收到该 storage 事件。
sessionStorage的上下文范围不同,不是通用跨标签通道。- 事件不是持久日志、事务、身份信号或顺序保证。
- 先做存储能力检测,处理竞争并保留可用回退。
Contents
storage 事件表示什么
接收方可看到 key、oldValue、newValue、storageArea 和 url,但看不到完整历史或服务端回执。接收方可能在写入后才加载、被挂起或已关闭;需要权威结果时应重新读取当前状态。写入 Window 要直接更新自己的界面。
localStorage 通常由同源上下文共享;sessionStorage 关联顶层浏览上下文,通常隔离不同标签。参考 WHATWG Web Storage、MDN storage event 和 MDN Web Storage API。
事件不会锁定并发写入,也不会解决冲突。为记录保存版本,接收时比较版本;两个标签编辑同一内容时提供合并或重试。
来源、上下文与隐私边界
协议、主机和端口组成来源。不同子域、端口、sandbox 框架、隐私窗口和存储分区可能看到不同数据。键存在或不存在不能作为身份判断,原因可能是新上下文、清理或访问被拒绝。
不要同步令牌和私密文档。遥测应有明确目的和期限。W3C 隐私原则支持目的限制和数据最小化。storage 事件不提供认证或授权。
面向竞争的界面与回退
先让界面在没有存储或事件时仍可用。检测访问、捕获配额错误,写入方直接更新,其他上下文重新读取。合并突发通知,限制读取并保留可访问的重试。事件缺失时使用手动刷新或服务端校验。
测试空存储、拒绝访问、写入相同值、removeItem、clear、损坏数据、旧版本、重载、隐藏标签和立即关闭。基础内容不能因通知缺失而消失。
使用 BotBrowser 测试
BotBrowser 支持运行隔离的 storage-event 兼容性夹具,观察写入 Window 和声明的其他上下文并记录可见结果。它不会暴露其他来源的存储,也不保证无竞争状态、事件顺序或关闭后的持久性。测试使用合成键值,只记录浏览器版本、测试来源、上下文类型、版本、结果和回退。
结论
storage 事件是排除写入 Window 的同源通知。写入方本地更新,接收方重新读取,并为竞争、分区和生命周期设计回退。不要从事件推断身份、授权或持久性。BotBrowser 让授权夹具可重复,同时不改变浏览器存储规则。