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

前言

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

实现思路

  • 使用的是 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 分钟前
拿来就用!Vue3+Cesium 飞入效果封装,3D大屏多场景直接复用
前端·vue.js·cesium
天蓝色的鱼鱼34 分钟前
都2026年了还不会Vite插件开发?手写一个版本管理插件,5分钟包会!
前端·vite
苏武难飞1 小时前
分享一个33号远征队的效果!
前端
鹏程十八少1 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
亿元程序员1 小时前
这款值68亿的游戏,你不实战一下吗?安排!
前端
摸鱼的春哥2 小时前
Agent教程15:认识LangChain(中),状态机思维
前端·javascript·后端
明月_清风2 小时前
告别遮挡:用 scroll-padding 实现优雅的锚点跳转
前端·javascript
明月_清风2 小时前
原生 JS 侧边栏缩放:从 DOM 监听到底层优化
前端·javascript
万少11 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
橙序员小站13 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端