返回知识中心
平台

BroadcastChannel:同源消息与隐私边界

使用 BroadcastChannel 协调同源浏览器上下文,同时保留关闭、重载、回退和隐私边界。

BotBrowser Team

文档中心

想直接进入 平台 文档吗?

这篇文章属于博客内容库。若你要步骤化配置、参考说明和持续更新,请直接进入对应 docs 分区。

BroadcastChannel 适合让同源的标签页、窗口、worker 或框架交换短通知。它不是通用消息总线、认证信号,也不是两个上下文属于同一人的证明。消息投递受浏览器来源模型约束,缺失或延迟消息有许多正常原因。BotBrowser 支持重复授权的同源夹具并记录可见的投递、关闭和重开结果,但不能跨源投递、放宽同源策略或保证不同浏览器版本的时序。

同源浏览器上下文共享有界消息通道,而另一个来源留在通道之外

TL;DR

  • 使用 BroadcastChannel 协调同源上下文。
  • 组件结束时关闭通道,把重载、挂起和终止视为正常生命周期状态。
  • 先做能力检测;API 不可用时保留 storage、worker 或服务端刷新等回退。
  • 同源可达性不是认证、身份、位置或信任证据。
  • BotBrowser 可以重复授权夹具和比较可见结果,但不能跨源或保证时序。

Contents

BroadcastChannel 传递什么

new BroadcastChannel(name) 为当前来源和上下文组创建命名通道。postMessage() 使用 structured clone 把消息交给同名的其他可用上下文,发送者不会收到自己的消息。它不是持久队列,也不提供投递回执。

使用稳定名称和短消息数据,例如 {version: 3, type: 'cart-changed', key: 'cart'}。不要放入令牌、完整账户记录或私密文本。通道应提示应用重新读取权威状态,而不是替代事务。先写入权威变更,再发布通知;组件卸载时移除 listener 并调用 close()。

消息是尽力投递的。上下文可能关闭、冻结或在发送后才创建;不可结构化克隆的值也会失败。处理器应比较版本、容忍重复和过期事件,再更新界面。

来源与隐私边界

浏览器比较协议、主机和端口。不同子域或端口即使属于同一团队也不共享通道。sandbox 框架可能获得不透明来源,存储分区和隐私窗口也可能改变可达性。

同源投递不建立身份。缺失消息不等于隔离失败,应检查来源、名称、监听时机、生命周期和可克隆性。参考 WHATWG web messaging、MDN BroadcastChannel 和 MDN 同源策略。

不要把通道名称和消息数据连接到账户、支付或精确位置记录。draft-updated 只表示产品状态可能变化,不表示谁输入、身处何地或哪个设备权威。W3C 隐私原则支持目的限制和数据最小化。

生命周期与回退设计

先设计没有 API 也能工作的基线。检测 BroadcastChannel,只在需要时创建;创建失败时仍保持主页面可用。storage、共享 worker 和服务端刷新各有不同语义,应分别记录保障范围。

路由变化时关闭旧通道;重载后先读取当前状态,再等待通知;从隐藏状态返回时,如数据重要则刷新。让处理器幂等,限制队列并保留可见重试。测试 API 缺失、错误名称、错误来源、发送前关闭、晚注册接收者、clone 错误、挂起和 worker 终止。

使用 BotBrowser 测试

BotBrowser 支持运行授权的同源多上下文夹具,记录可见消息投递与关闭或重开结果,并比较声明的浏览器版本。它不能跨来源投递、绕过同源策略、保证不同版本的时序,也不能把通道可达性当作身份证据。测试使用合成数据,只记录浏览器版本、测试来源、监听状态、可见结果和回退结果。

结论

BroadcastChannel 是同源上下文之间的协调提示。把权威状态放在经过验证的存储中,在生命周期切换时关闭通道,让处理器幂等,并提供一等回退路径。BotBrowser 让授权比较可重复,而来源策略、应用授权、生命周期和隐私仍由相应系统负责。

延伸阅读

Sources

#BroadcastChannel#同源#浏览器协调#隐私#BotBrowser

让 BotBrowser 从研究走向生产

先用这些指南理解模型,再进入跨平台验证、隔离上下文和面向规模化的浏览器部署。