BroadcastChannel方法跨浏览器窗口通信

2023-09-14 10:04:53

1. 描述

同源 的不同浏览器窗口,Tab 页,frame 或者 iframe 下的不同文档之间可以通过 BroadcastChannel 相互通信。

2. 构造函数

通过 BroadcastChannel 类传入的参数创建实例,传入的参数将指定通道名称,在同源环境下该通道可以相互通信,一个名称只对应一个通道。

//	将创建的实例挂载到window上,可以在浏览器全局访问该方法
//	channelName即为指定的通道名称, 为字符串类型
window.broadcastChannel = new BroadcastChannel(channelName);

3. 通道名称

创建后的BroadcastChannel实例可以通过name属性来访问创建的通道名称。

//	broadcastChannel对象已在上面创建并挂载到浏览器全局对象下
console.log(broadcastChannel.name);

4. 方法使用

  1. postMessage 发送信息,以 message 事件的形式发送给每一个绑定到同一个通道名称的广播频道。
//	broadcastChannel对象已在上面创建并挂载到浏览器全局对象下
//	message为Object类型的消息
broadcastChannel.postMessage(message);
  1. onmessage 监听通道信息,当频道收到信息时,将触发message事件,在事件的data属性中获取同一通道发送的信息数据。
//	broadcastChannel对象已在上面创建并挂载到浏览器全局对象下
//	可以通过增加监听事件,在event.data中获取到监听的广播信息。
broadcastChannel.addEventListener('message', (event) => {
	console.log(event.data);
});

//	broadcastChannel.onmessage = (event) => {};
  1. close 关闭通道通信,让其被垃圾回收(必要的步骤,浏览器浏览器没有其他方式知道频道不再被需要)。
//	broadcastChannel对象已在上面创建并挂载到浏览器全局对象下
// 当完成后,断开与频道的连接
broadcastChannel.close();
  1. messageerror 一条无法反序列化的消息时将会触发该事件。
//	broadcastChannel对象已在上面创建并挂载到浏览器全局对象下
//	可以通过增加监听事件,在event.data中获取到监听的无法反序列化的广播信息。
broadcastChannel.addEventListener('messageerror', (event) => {
	console.log(event.data);
});

//	broadcastChannel.onmessageerror = (event) => {};

5. 题外话

在vue项目使用时,可以在根组件上通过BroadcastChannel创建的对象监听message和播报postMessage同源同信道的广播信息,组件销毁时通过close关闭通信并垃圾回收。项目内部通过eventBus、父子事件触发、注入方式等其他方式处理信息传递和监听,这样收口在一处,形成逻辑闭环。

更多推荐

ES6如何声明一个类?类如何继承?

在JavaScript中,您可以使用关键字class来声明一个类。类是一种模板,用于创建对象的构造函数,其中包含了属性和方法。以下是声明一个类的基本语法:classClassName{constructor(){//构造函数,用于创建对象实例时初始化属性this.propertyName=value;}//方法定义me

stm32学习-芯片系列/选型

【03】STM32·HAL库开发-初识STM32|STM概念、芯片分类、命名规则、选型|STM32原理图设计、看数据手册、最小系统的组成、STM32IO分配_小浪宝宝的博客-CSDN博客STM32:ST是意法半导体,M是MCU/MPU,32是32位。ST累计推出了:5大类、18个系列、1000多个型号的Cortex内核

注入之mssql数据库(手工注入)

sa最高权限(可以获取系统权限)打开一个mssql数据库要拼接一个参数拼接这个参数?xxser=1检查是否是mssql数据库andexists(select*from%20sysobjects)为真是属于mssql查询当前数据库系统的用户名andsystem_user=0(由于版本问题谷歌不可以)可以去虚拟机,爆出系统

基于讯飞人脸算法(调用API进行人脸比对)

先看结果必须遥遥领先基于讯飞人脸算法视频演示所需准备这里我调用了:人脸比对API文档|讯飞开放平台文档中心https://www.xfyun.cn/doc/face/xffaceComparisonRecg/API.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E代码里所涉及的APPI

联盟 | Nativex 与 HelpLook 携手助力品牌独立站实现营销增长

近日,汇量科技旗下数字营销平台Nativex与AI知识库搭建工具HelpLook携手合作,共同推动中国跨境卖家和出海开发者的数字营销和客户服务,提供更广阔的增长空间。关于Nativex&HelpLook作为一家全球数字营销平台,Nativex不仅拥有丰富的数字营销经验,还在全球范围内积累了十余年的移动营销专业知识。Na

buuctf-ciscn_s_3

一、srop参考文章-博客园-wudiiv11(作者)-BUUCTF-ciscn_2019_s_3参考文章-博客园-z2yh(作者)-Srop原理与利用方法vlun函数中没有分配栈帧(指rsp没有增长,也没有压入父函数的rbp,这也导致之后的构造payload的时候不需要填充rbp的那8个字节)首先看中间这一栏,要找b

[运维|数据库] mysql的charset与PostgreSQL的encoding

在PostgreSQL数据库中,字符集(charset)的概念与MySQL有所不同。在PostgreSQL中,字符集通常由所谓的"编码"(encoding)来表示。每个数据库都可以使用不同的编码,以适应不同的字符集需求。以下是一些常见的PostgreSQL编码及其对应的MySQL字符集的替代方式:UTF-8(Unico

day31 代码随想录 分发饼干&摆动序列&最大子序和

大纲●理论基础●455.分发饼干●376.摆动序列●53.最大子序和455.分发饼干题目:455.分发饼干//分发饼干//有数组g代表胃口大小,数组s代表饼干大小//求满足最多胃口的值//思路是对gs排序//优先选择最大的饼干满足最大的胃口//[1,2,3][1,1]intfitChildVal(vector<int>

Multitor:一款带有负载均衡功能的多Tor实例创建工具

关于MultitorMultitor是一款带有负载均衡功能的多Tor实例创建工具,Multitor的主要目的是以最快的速度完成大量Tor进程的初始化,并将大量实例应用到我们日常使用的程序中,例如Web浏览器和聊天工具等等。除此之外,在该工具的帮助下,我们还可以在进行渗透测试和对基础设施安全性进行审计时提高隐蔽性和匿名性

【校招VIP】前端操作系统之I/O调度算法

考点介绍I/O调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。前端操作系统之I/O调度算法-相关题目及解析内容可点击文章末尾链接查看!一、考点题目1.某文件占10个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓

vue项目通过json-bigint在前端处理java雪花id过长导致失去精度问题

这里我简单模仿了一个接口这里我单纯返回一个long类型的雪花id然后前端用axios去请求大家知道axios会对请求数据做一次处理而我们data才是拿到我们java这边实际返回的东西简单说就是输出一下我们后端返回的内容这里我们网络中显示的是358661018680954880但神奇的一幕发生了我们实际输出的是35866

热文推荐