2026-10-31 15:34:18
Broadcast Channel API 是浏览器提供的 Web API,允许在不同浏览器窗口、标签页或 iframe 之间实现高效的数据共享,无需依赖复杂技术如 WebSocket 或 WebRTC。
Broadcast Channel API 创建一个广播通道,通过该通道可实现跨文档或跨窗口的数据共享。其核心功能包括:

创建频道通过 BroadcastChannel 构造函数创建频道实例,指定频道名称(如 "my_channel")。
const myChannel = new BroadcastChannel("my_channel");发送消息使用 postMessage() 方法发送数据(支持字符串、对象、ArrayBuffer 等)。
myChannel.postMessage("Hello world!");接收消息通过 onmessage 事件或 addEventListener 监听消息。
// 方法1:onmessagemyChannel.onmessage = (event) => { console.log(event.data); // 输出: "Hello world!"};// 方法2:addEventListenermyChannel.addEventListener("message", (event) => { console.log(event.data);});关闭频道调用 close() 方法释放资源。
myChannel.close();传递大型数据(Transferable Objects)使用 ArrayBuffer 和 Transferable Objects 优化大数据传输,避免深拷贝。
const buffer = new ArrayBuffer(1024);myChannel.postMessage(buffer, [buffer]); // 第二个参数指定转移的对象识别消息来源通过 MessageEvent.source 获取发送消息的窗口引用(可用于安全验证)。
myChannel.onmessage = (event) => { console.log(event.source); // 发送消息的窗口对象};传递通信通道通过 MessageEvent.ports 和 postMessage() 实现更复杂的跨窗口通信(如 MessageChannel)。
Broadcast Channel API 支持大多数现代浏览器,但不支持 Internet Explorer。具体版本如下:
详细兼容性数据可参考
需求:实现同一站点下多个标签页的输入框同步更新。实现步骤:
封装 Broadcast Channel API,支持多种存储后端(如 LocalStorage、IndexedDB)。
星标数:1500+。
为 React 提供的 Broadcast Channel API 封装,简化跨组件通信。
星标数:1300+。
Broadcast Channel API 是轻量级跨窗口通信的理想选择,适用于:
建议:
通过合理利用 Broadcast Channel API,可以显著提升多窗口应用的用户体验和开发效率。