前端实现两个页面之间的通讯

前言

公司项目的新增和修改都是以打开新页面的方式实现,为啥这样还是因为领导说弹出框的形式看都看吐了。唉!!!!!!!!!!!

实现思路

  • 使用的是 BroadcastChannel API
  • 封装了一个简单的BroadcastChannel类

BroadcastChannel API的基本使用

BroadcastChannel API 允许同一源(origin)下的不同浏览上下文(如不同标签页、 iframe** 等)之间进行实时消息通信。

  • 创建频道
js 复制代码
let channelNameId = new BroadChannel(频道名) 
  • 传递数据
js 复制代码
channelNameId.onmessage=onmessage = (e) => {
       console.log('监听传递的数据');    
}
  • 发送消息
js 复制代码
channelNameId.postMessage(1)
  • 关闭通讯
js 复制代码
channelNameId.close()

代码实现

js 复制代码
/**
 * 可多个频道使用
 * 
 *  使用方法:  
 *   import {BroadChannel}  from '@/mixins/moreChannel.js'
 * 
 *   new BroadChannel(频道名)  
 *   new BroadChannel(频道名,回调)  回调可选
 *   let channel = new BroadChannel('channelName',(e)=>{ console.log(e)})
 *   channel.sendChannel('发送消息')
 */

export class BroadChannel {
    constructor(name, callback) {
        this.channelNameId = null
        this.createChannel(name, callback)
        window.addEventListener('beforeunload', () => {
            this.closeChannel();
        });
    }
    // 创建广播通道
    createChannel(name, callback) {
        this.channelNameId = new BroadcastChannel(name)
        if (callback && typeof callback === 'function') {
            this.onChannel(callback)
        }
    }
    // 发送消息
    sendChannel(data) {
        this.channelNameId.postMessage(data)
    }
    // 监听消息
    onChannel(callback) {
        this.channelNameId.onmessage = (e) => {
            callback(e.data)
        }
    }
    // 关闭广播通道
    closeChannel() {
        this.channelNameId.close()
        this.channelNameId = null
    }
}
相关推荐
袁煦丞5 小时前
企业微信开发者的‘跨网穿梭门’:cpolar内网穿透实验室第499个成功挑战
前端·程序员·远程工作
Simon_He5 小时前
vue-markdown-renderer:比 vercel streamdown 更低 CPU、更多节点支持、真正的流式渲染体验
前端·vue.js·markdown
机构师6 小时前
<uniapp><指针组件>基于uniapp,编写一个自定义箭头指针组件
javascript·uni-app·vue·html
小桥风满袖6 小时前
极简三分钟ES6 - 模块化
前端·javascript
练习时长一年6 小时前
自定义事件发布器
java·前端·数据库
IT_陈寒6 小时前
SpringBoot高并发优化:这5个被忽视的配置让你的QPS提升300%
前端·人工智能·后端
光影少年6 小时前
css优化都有哪些优化方案
前端·css·rust
BillKu7 小时前
npm 安装命令中关于 @ 的讲解,如:npm install @vue-office/docx vue-demi
前端·vue.js·npm
bestadc7 小时前
LeetCode 几道 Promises 和 Time 的题目
javascript·算法·leetcode
yangzhi_emo7 小时前
ES6笔记4
前端·笔记·es6