broadcast channel api 是 javascript 中 bom 提供的轻量级同源多标签页通信机制,支持同源页面间通过命名通道广播结构化克隆数据,需手动关闭通道并注意浏览器兼容性。

Broadcast Channel API 是 JavaScript 中 BOM 提供的轻量级同源多标签页通信机制,无需服务端参与,适合在同一个源(协议 + 域名 + 端口)下的多个浏览器标签页、窗口或 iframe 之间广播消息。
创建和使用 BroadcastChannel 实例
只需传入一个字符串名称即可创建通道,同名通道自动组成通信组,所有同源页面共享该通道:
- 名称必须是合法字符串(不能含空格、控制字符等),建议用小写+短横线风格,如 "app-notifications"
- 同一页面中重复 new 同名实例,会复用已有通道,不会新建
- 通道名区分大小写,"chat" 和 "Chat" 是两个不同通道
发送消息:postMessage()
调用 channel.postMessage(data) 向同源所有监听该通道的页面广播数据:
- data 可以是任何可被结构化克隆算法序列化的值(如对象、数组、字符串、数字、布尔、Date、RegExp、ArrayBuffer 等),但不能传函数、undefined、Symbol 或 DOM 节点
- 不支持跨域,即使两个页面域名相同但端口不同(如 http://localhost:3000 vs http://localhost:5000),也无法通信
- 示例:
bc.postMessage({ type: "USER_LOGIN", userId: 123 });
接收消息:监听 message 事件
通过 addEventListener("message", handler) 接收广播消息:
- 事件对象 event.data 即为发送方传入的数据
- event.source 指向发送消息的 BroadcastChannel 实例(可用于识别来源,但实际多数场景无需区分)
- 务必在页面卸载前调用 removeEventListener 或 channel.close(),避免内存泄漏;推荐在 beforeunload 或 visibilitychange 中清理
关闭通道与生命周期注意事项
BroadcastChannel 实例不会自动销毁,需手动关闭:
- 调用 channel.close() 显式释放资源,关闭后不可再发/收消息
- 页面关闭时通道自动断开,但若标签页长期存在(如 SPA 应用),应主动管理生命周期
- 注意兼容性:Chrome 64+、Firefox 61+、Edge 79+、Safari 15.4+ 支持;旧版 Safari 和部分安卓 WebView 不支持,可用 localStorage + storage 事件降级
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











