a连接 会触发react监听浏览器关闭或者页面关闭_跨页面通信Broadcast Channel

Broadcast Channel 是什么?

在前端,我们经常会用postMessage来实现页面间的通信,但这种方式更像是点对点的通信。对于一些需要广播(让所有页面知道)的消息,用postMessage不是非常自然。Broadcast Channel 就是用来弥补这个缺陷的。

顾名思义,Broadcast Channel 会创建一个所有同源页面都可以共享的(广播)频道,因此其中某一个页面发送的消息可以被其他页面监听到。

下面就来速览一下它的使用方法。

如何使用?

Broadcast Channel 的 API 非常简单易用。

创建

首先我们会使用构造函数创建一个实例:

const bc = new BroadcastChannel('alienzhou');

可以接受一个DOMString作为 name,用以标识这个 channel。在其他页面,可以通过传入相同的 name 来使用同一个广播频道。用 MDN 上的话来解释就是:

There is one single channel with this name for all browsing contexts with the same origin.

该 name 值可以通过实例的.name属性获得

console.log(bc.name);// alienzhou

监听消息

Broadcast Channel 创建完成后,就可以在页面监听广播的消息:

bc.onmessage = function(e) { console.log('receive:', e.data);};

对于错误也可以绑定监听:

bc.onmessageerror = function(e) { console.warn('error:', e);};

除了为.onmessage赋值这种方式,也可以使用addEventListener来添加'message'监听。

关闭

可以看到,上述短短几行代码就可以实现多个页面间的广播通信,非常方便。而有时我们希望取消当前页面的广播监听:

  • 一种方式是取消或者修改相应的'message'事件监听
  • 另一种简单的方式就是使用 Broadcast Channel 实例为我们提供的close方法。
bc.close();

两者是有区别的:

取消'message'监听只是让页面不对广播消息进行响应,Broadcast Channel 仍然存在;而调用close方法这会切断与 Broadcast Channel 的连接,浏览器才能够尝试回收该对象,因为此时浏览器才会知道用户已经不需要使用广播频道了。

在关闭后调用postMessage会出现如下报错

bb912c7d086a91702bffb0e58ed28470.png

如果之后又再需要广播,则可以重新创建一个相同 name 的 Broadcast Channel。

兼容性如何?

Broadcast Channel 是一个非常好用的多页面消息同步 API,然而兼容性却不是很乐观

45e4381c4c22c0125e87bd24852e3780.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值