跨标签通信BroadChannel
# 概述
浏览器标签其实可以相互进行通信,需要用到BroadcastChannel
,关于BroadcastChannel
,MDN 上是这样介绍的:
- 接口代理了一个命名频道,可以让指定
origin
下的任意browsing context
来订阅它。它允许同源的不同浏览器窗口,Tab
页,frame
或者iframe
下的不同文档之间相互通信。通过触发一个message
事件,消息可以广播到所有监听了该频道的BroadcastChannel
对象。
# 和MessageChannel
的不同
在中提到的浅谈 MessageChannel (opens new window)中提到的MessageChannel
适用于两个线程之间的通信,而BroadcastChannel
可以用于两个不同进程之间的通信。
# BroadcastChannel
的语法
BroadcastChannel
可以通过构造函数生成一个实例,然后通过实例监听消息、发送消息,如下:
const channel = new BroadcastChannel("myChannel"); //接收一个参数name,这个名称在同一域名下的不同页面之间必须是唯一的
channel.onmessage = (event) => {
...
};
const sendMessage = (message) => {
channel.postMessage(message);
};
channel.onmessageerror=(error)=>{
...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 示例
一个简单的示例可参考Box 在不同 tab 无缝移动 (opens new window)
编辑 (opens new window)
上次更新: 2024/08/19, 02:13:22