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

前言

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

实现思路

  • 使用的是 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
    }
}
相关推荐
丷丩1 小时前
MapLibre GL JS第47课:添加动画图标
javascript·gis·动画·mapbox·maplibre
独泪了无痕1 小时前
Vue3中防御XSS攻击的“特效药”-DOMPurify
前端·vue.js·安全
小小19921 小时前
idea 配置less转化为css
前端·css·less
hhb_6181 小时前
Less嵌套避坑:优先级冲突实战解析
前端·css·less
快乐的哈士奇1 小时前
【Next.js实战①】Gmail API 按柜号检索邮件:OAuth 双 Cookie 与搜索 Fallback
开发语言·javascript·ecmascript
云水一下1 小时前
Vue.js从零到精通系列(五):全局状态管理——Pinia 核心与实践
前端·javascript·vue.js
我不是外星人1 小时前
浅谈我对 AI 发展的看法
前端·ai编程·claude
kmblack12 小时前
javascript计算年龄
开发语言·javascript·ecmascript
甲维斯2 小时前
测一波Kimi K2.7,消耗一周配额!
前端·人工智能·游戏开发
Dick5072 小时前
ROS2 多机器人通用 Driver 层复盘:BaseRobotDriver 到多平台 Mock 切换实现
前端·javascript·机器人