VUE中使用BroadcastChannel实现同源多页面实时通信

news/2025/3/21 17:32:38/文章来源:https://www.cnblogs.com/databank/p/18785510

使用BroadcastChannel广播通信

准备工作:

  1.channel.js文件,内容如下

const Channel = {/*** BroadcastChannel对象Map*/channelMap: new Map(),/*** 发送消息,重载方法,可直接调用,省略对象实例化操作* @param {*} channelName 通道名称,用以区分不同的通道* @param {*} object 消息体*/send: (channelName, object) => {if (!Channel.channelMap.has(channelName)) {let channel = new BroadcastChannel(channelName);Channel.channelMap.set(channelName, channel);}Channel.channelMap.get(channelName).postMessage(object);},/*** 监听消息,重载方法,可直接调用,省略对象实例化操作* @param {*} channelName 通道名称,用以区分不同的通道* @param {*} callback 回调函数*/listen: (channelName, callback) => {if (!Channel.channelMap.has(channelName)) {let channel = new BroadcastChannel(channelName);Channel.channelMap.set(channelName, channel);}Channel.channelMap.get(channelName).onmessage = ({ data }) => {callback(data);};},/*** 通道关闭* @param {*} channelName 通道名称,用以区分不同的通道*/close: (channelName) => {if (Channel.channelMap.has(channelName)) {Channel.channelMap.get(channelName).close();Channel.channelMap.delete(channelName);}},/*** 通道枚举,定义业务中需要用到的所有通道名称枚举,可根据业务需求无限扩容*/channelEnum: {REMOVE_TAB: { name: 'removeTab', comment: 'tabs标签移除时,用以通知被关闭页面,进行诸如实例、注册事件等的销毁工作' },GLOBAL_LOADING: { name: 'globalLoading', comment: '全局加载动画' },TEST: { name: 'TEST_Channel', comment: 'TEST_Channel' },},
};export default Channel

  2.选择是新打开页签还是新开窗口(下面代码二选一即可)

    /*** 打开新窗口*/openNewWindow () {// 打开新窗口// 新窗口居中let left = ((window.screen.width / 2) - 180) / 2// 新窗口的宽度let width = (window.screen.width / 2) + 180// 新窗口要设置的参数let params = `height=${window.screen.height},width=${width},top=0,left=${left},toolbar=no,menubar=no,scrollbars=no,resizable=yes,location=yes,status=no`window.open(`/testPage/${this.title}/${this.id}/${this.type}/${this.date}`,'_blank',params)},/*** 打开新页签*/openNewTab() {// 打开新标签let routeData = this.$router.resolve(({// path 要跳转的路由地址path: '/testPage',// query 要传递的参数query: {title: this.title,id: this.id,type: this.type,date: this.date,}}))window.open(routeData.href, '_blank')},

  

代码编写与测试

第一步:

  引入channel.js文件到项目中,再引入到页面中(生产者与消费者都需要引入)

第二步:

  生产者代码:

    send() {
console.log('-------send-------')Channel.send(Channel.channelEnum.TEST.name, '发消息了。。。:'+new Date())},

   消费者代码:

  mounted() {Channel.listen(Channel.channelEnum.TEST.name, this.listen)},methods:{listen(data) {
    console.log('-------listen-------')console.log('收到消息:', data);},}

第三步:

   测试效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902556.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon 入门教程(五) 缺陷检测

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18785484有兴趣可以多看其他的halcon教程halcon 学习教程目录本篇主要讲一些常见的缺陷检测方法,目前只会讲一些,后面有空的话会不断的补充完整。因为缺陷的种类实在太多太多了,各种各样的缺陷可能都要用各种…

万字长文详解SIFT特征提取

本文对 SIFT 算法进行了详细梳理。SIFT即尺度不变特征变换(Scale-Invariant Feature Transform),是一种用于检测和描述图像局部特征的算法。该算法对图像的尺度和旋转具有不变性,并且在一定程度上能够抵御亮度变化和视角变化,具备较强的鲁棒性。此外,SIFT检测流程还提出了…

记录---学习项目如何用Docker部署

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 写在前面 Docker对比传统虚拟机 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效…

龙信年终技术考核wp

龙信年终技术考核wp 容器密码:MjAyNeWKoOayuQ== 假期里打的第一场取证比赛,一开始名次还挺高,后面服务器不太会做了,排名直接狂掉,获奖的名额太少了。其实上学期打的第一场取证也是龙信办的龙信杯,真的好难,还是这个友好。 1. 分析手机备份文件,该机主的QQ号为?(标准格…

规则系统|第二步 连接数据库

1.输出所有的数据库名2.问一下相关负责人这个需求放到哪个库里ssc: {ENGINE: django.db.backends.mysql, NAME: ssc, USER: star, PASSWORD: dpag5BoORZErhu4ttTju, HOST: 122.5.32.82, PORT: 19336} 3.下载dbeaver,连接相关库 4.用dbeaver手动创建需要的表,这里需要的表如下…

Excel甘特图

背景:领导让我在excel上填项目计划, 也就是分配未来的工时。有名称、开始时间、结束时间等。平时业务挺杂的, 其实没有办法准确的填写连贯的工时计划。需要稍微调整一下。甘特图比较直观, 但是MSProject又太大没装,还要收费。上网搜了一下还真有用wps office做的。 wps本身…

JMeter 一站式安装指南:跨平台详解与常见问题解析

前言 本教程为 macOS 与 Windows 用户提供 安全、高效 的 JMeter 安装方案,涵盖从基础安装到进阶配置的全流程。内容包含:✅ 双平台专属指南:针对 macOS 系统优化下载路径(附国内镜像直链),解决“身份不明开发者”警告;Windows 系统提供官方直装与快捷方式配置技巧。✅ …

基于Qt信号槽机制的AI对话工具开发——使用流式输出且支持Function Call

基于Qt信号槽机制的AI对话工具开发 在前面学习了Qt的Http请求,尝试完成了基于Qt界面调用DeepSeek的API,实现了一些基本功能,如记忆对话,流式输出等 点击这里查看 但是我发现内容多了过后代码过于冗杂,层次不清晰,于是打算重新架构一下,并记录一下开发思路 完整源码可以在…

中企出海财务合规难?交给「云+AI」来破局|SAP ERP海外实施商工博科技

2月20日,SAP全球化运营高峰论坛汇聚超1000位出海企业高管和行业专家,共同探讨中国企业在行业多样化、投资模式多元、全球布局因地制宜的全球化新趋势下面临的出海机遇与挑战。这次我们将从合规风险、供应链韧性、人才管理、IT架构、AI赋能等角度进行复盘回顾,探讨如何依托先…

乒乓球比赛

题目:乒乓球比赛(武汉大学机试真题):甲={a,b,c}、乙={x,y,z}两队进行比赛,一直a不和x比,c不和x和z比,请问所有可能的比赛安排 //应该使用全排列 列出所有的比赛结果,再输出满足要求的对局 //但还有一种取巧的方法实现 使用库函数next_Permutation(nums.begin(),nums.end(…

华为开辟的赛道,终究也只有华为敢跑起来

3月20日,华为Pura先锋盛典召开。一部被称为阔折叠的华为Pura X正式亮相。之前外界对这款新品有诸多猜想,今天终于揭开了神秘面纱:这是一部看上去不太像手机的手机,很宽很“阔”。全新形态的产品打破了人们对手机的刻板印象,也给了手机未来更多的想象。同时作为首款全面搭载…

RANSAC---从直线拟合到特征匹配去噪

Ransac全称为Random Sample Consensus,随机一致性采样。该方法是一种十分高效的数据拟合方法。我们通过最简单的拟合直线任务来了解这种方法思路,继而扩展到特征点匹配中的误点剔除问题。 (注意,RANSAC不是直接用于特征点匹配,而是一种在初步特征匹配后消除误匹配的方法)…