window.MessageChannel——虫洞般的存在

MessageChannel是一个用于异步通信的API,具备跨域能力,常见应用场景包括iFrame、Web Worker和Vue的nextTick。在iFrame跨域场景中,它通过postMessage在不同窗口间传递信息。在Web Worker中,它用于不同Worker线程间的通信。Vue的nextTick利用MessageChannel进行DOM更新后的回调执行。
摘要由CSDN通过智能技术生成

MessageChannel

题记

window.MessageChannel是一个异步操作的API,

它可以抽象成一个管道,

既然是一个管道,那么它肯定有两个端口,这两个端口是信息源,也是消息源,可以互相通信

首先来看看它的兼容性

兼容性有时候决定了你是否需要学它,能否用到它

可以看到,大多主流浏览器都已经实现了这个API,可以放心使用

不多bb直接上代码理解它的基础用法

Tips:

  • MessageChannel并不是一定要new出来才能用

  • windowWorker对象下也有对应postMessage方法,同样可以监听message事件

  • windowWorker用DOM2级事件处理不需要调用start()方法

const channel = new MessageChannel();
const port1 = channel.port1;
const port2 = channel.port2;
//监听事件
//用DOM2级事件处理
port1.addEventListener('message', (msg) => {
   
	console.log('port1接收到信息:' + msg.data);
})
port2.addEventListener('message', (msg) => {
   
	console.log('port2接收到信息:' + msg.data);
})
//如果不调用start()方法的话,将监听不到message事件
port1.start();
port2.start();


//使用DOM0级事件处理,会隐式调用start()方法
//port1.onmessage = (msg)=>{
   
//	console.log('port1接收到信息:' + msg.data);
//}
//port2.onmessage = (msg)=>{
   
//	console.log('port2接收到信息:' + msg.data);
//}

port1.postMessage('来自port1的信息');
port2.postMessage('来自port2的信息');

控制台输出:

来自port1的信息																	index.html
来自port2的信息																	index.html

我们来看看MessageChannel含有的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值