BroadcastChannel:跨标签页通信

devtools/2024/9/22 22:29:45/

目前浏览器跨标签页通信的方式有很多,比如:websocket、针对LocalStorage使用window.onstorage、window.postmessage。
本文将用BroadcastChannel实现同一域名下两个标签页间消息的收和发

一、全局创建通信通道

const channel = new BroadcastChannel('channel1');

二、发送消息与监听消息

const sendMsg = (type, msg) => {channel.postMessage({type,msg,});
};const listen = (callback) => {channel.addEventListener('message', (e) => {console.log('eee', e);callback(e.data);});
}

三、应用

触发事件

const handleClick = () => {sendMsg('add', { name: '张三', age: 22 });
}

接受消息处理业务逻辑

listen((data) => {console.log('data', data);const { type, msg } = data;if (type === 'add') {const h1 = document.querySelector('h1');h1.append(`姓名:${msg.name}-年龄:${msg.age}`);}
});

演示

使用Live Server启动本地演示项目,两个标签页打开同一个页面,一个发一个收

channel

源码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script src="./channel.js"></script><script src="./index.js"></script><button onclick="handleClick(event)">发送</button><h1></h1>
</body>
</html>
// channel.jsconst channel = new BroadcastChannel('channel1');const sendMsg = (type, msg) => {channel.postMessage({type,msg,});
};const listen = (callback) => {channel.addEventListener('message', (e) => {console.log('eee', e);callback(e.data);});
}
// index.jslisten((data) => {console.log('data', data);const { type, msg } = data;if (type === 'add') {const h1 = document.querySelector('h1');h1.append(`姓名:${msg.name}----年龄:${msg.age}`);}
});const handleClick = () => {sendMsg('add', { name: '张三', age: 22 });
}

http://www.ppmy.cn/devtools/39720.html

相关文章

浅谈消息队列和云存储

1970年代末&#xff0c;消息系统用于管理多主机的打印作业&#xff0c;这种削峰解耦的能力逐渐被标准化为“点对点模型”和稍复杂的“发布订阅模型”&#xff0c;实现了数据处理的分布式协同。随着时代的发展&#xff0c;Kafka&#xff0c;Amazon SQS&#xff0c;RocketMQ&…

Web APIs - 第1天笔记

了解 DOM 的结构并掌握其基本的操作&#xff0c;体验 DOM 的在开发中的作用 知道 ECMAScript 与 JavaScript 的关系 了解 DOM 的相关概念及DOM 的本质是一个对象 掌握查找节点的基本方法 掌握节点属性和文本的操作 能够使用间歇函数创建定时任务 介绍 知道 ECMAScript 与…

OceanBase学习1:分布式数据库与集中式数据库的差异

目录 1. 传统集中式数据库 2. 数据库中间件的分库分表 3. 分布式数据库的基本特点及对比分析 4. OceanBase和传统数据库的对比 5. 小结 1. 传统集中式数据库 优点 成熟稳定:经过近40年的发展&#xff0c;应用到各行各业&#xff0c;产品技术非常成熟稳定行业适配性强:适配…

信息系统架构模型_3.企业数据交换总线

1.企业数据交换总线 实践中&#xff0c;还有一种较常用的架构&#xff0c;即企业数据交换总线&#xff0c;即不同的企业应用之间进行信息交换的公共通道&#xff0c;如图1所示。 图1 企业数据交换总线架构 这种架构在大型企业不同应用系统进行信息交换时使用较普遍&am…

Redis 实战之对象

Redis 实战 - 对象 对象的类型与编码类型编码和底层实现 字符串对象编码的转换字符串命令的实现 列表对象编码转换列表命令的实现 哈希对象编码转换哈希命令的实现 集合对象集合命令的实现 有序集合对象编码的转换有序集合命令的实现 类型检查与命令多态类型检查的实现多态命令…

RabbitMQ(安装配置以及与SpringBoot整合)

文章目录 1.基本介绍2.Linux下安装配置RabbitMQ1.安装erlang环境1.将文件上传到/opt目录下2.进入/opt目录下&#xff0c;然后安装 2.安装RabbitMQ1.进入/opt目录&#xff0c;安装所需依赖2.安装MQ 3.基本配置1.启动MQ2.查看MQ状态3.安装web管理插件4.安装web管理插件超时的解决…

VueComponent构造函数

//创建school组件——注册给谁 在谁的结构上写const school Vue.extend({name: school,//开发者工具的显示template: <div><h2>学校名称&#xff1a;{{schoolName}}</h2><h2>学校地址&#xff1a;{{adress}}</h2> </div>,//结构data() {…

【比邻智选】MR880A模组

&#x1f680;高性价比&#xff0c;5G/4G双模&#xff0c;稳定可靠 &#x1f310;功能丰富&#xff0c;5G特性一应俱全 &#x1f9e9;多封装兼容&#xff0c;适配性强&#xff0c;灵活升级智能设备