加载中...
BroadcastChannel 是一种让同源下不同标签页、窗口或 Worker 之间相互通信的浏览器接口。它们只需加入同名频道即可收发消息,常用于多标签页状态同步与登录态广播。

| 类型 | 浏览器通信接口 |
| 通信范围 | 同源多上下文 |
| 数据复制 | 结构化克隆 |
| 通信模式 | 一对多广播 |
| 典型用途 | 多标签页同步 |
BroadcastChannel API(广播频道接口)是一种允许同一源下的多个浏览上下文相互通信的浏览器接口。任意标签页、内嵌框架或 Worker 只要创建同名频道对象,即可像收听同一个广播一样收发消息。
用户常在多个标签页打开同一网站,这些页面之间默认相互隔离。过去要同步它们的状态,开发者往往借助本地存储的变化事件或轮询,写法繁琐且语义不清。BroadcastChannel 提供了一条专门的通信通道:创建时传入一个频道名,所有同源、同名的上下文便加入该频道,通过发送消息即可广播给除自己之外的全部成员。
最典型的场景是登录态同步:用户在一个标签页退出登录,其他标签页收到广播后立即清理界面并跳转。它也用于多标签页共享的主题切换、购物车更新、通知去重(多标签只弹一次),以及在主线程与 Worker 之间协调状态。相比本地存储事件方案,它语义更清晰,且不必写入磁盘。
问:它能跨不同网站通信吗?答:不能。BroadcastChannel 严格受同源策略约束,只有协议、域名、端口完全一致的上下文才能加入同一频道,这也是其安全边界。
问:与 postMessage 有何区别?答:窗口间的 postMessage 需要持有目标窗口的引用并逐一发送,适合点对点通信;BroadcastChannel 则是一对多广播,发送方无需知道有哪些接收者,更适合多标签页的状态同步。

| 类型 | 浏览器通信接口 |
| 通信范围 | 同源多上下文 |
| 数据复制 | 结构化克隆 |
| 通信模式 | 一对多广播 |
| 典型用途 | 多标签页同步 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧