当前位置: 首页 > news >正文

浏览器标签页之间的通信

前言

在开发管理后台页面的时候,会遇到这样一种需求:有一个列表页面,一个新增按钮,一个新增页面,点击新增按钮,在一个新的标签页中打开新增页面。并且,新增后要自动实时的更新列表页面的数据。

如果用Vue/React等现代SPA(单页面)框架,我们很容易想到使用状态管理库来实现,但如果是两个不同的html页面呢,例如一个是list.html,一个是detail.html,你可能会想到使用websocketEventSource,但这实在是有点大材小用了。

上干货

最近看了渡一袁老师的视频,学到一个监听storage事件,能够监听别的标签页改动localStorage中的任何一个key


可以看到在别的标签页改变了storage中的一个key,即可触发监听,并且能知道改动了哪个key,以及最新的value值。这就相当于是一个标签页往另一个标签页发送消息。

有了这个,这样我们就可以实现标签页之间的通信了。

可以写一个通用的js,这个js只需要实现两个函数。一个用来发送消息,一个用来监听消息。

发送消息的函数

思路:

  • 参数1:接收一个type类型,用来表示做了什么操作
  • 参数2:接收一个操作的数据payload
  • 函数体:用type作为key,payload作为value,保存到localStorage
  • 返回值:无

前面说了,只有某个key的value值改变了才会触发,那么多次新增一样的数据,就不会触发,所以需要给保存的数据附加一个随机数。

/*** @description: 发送消息* @param {*} type 操作类型* @param {*} payload 操作的数据* @return {*} null*/
export function sendMsg(type, payload) {localStorage.setItem(type, JSON.stringify({payload,temp: +new Date()}))
}

监听消息的函数

思路:

  • 参数:接收一个回调函数
  • 函数体:监听storage事件,将监听到的数据回传给回调函数
  • 返回值:返回一个函数用来取消监听
/*** @description: 监听消息* @param {*} handle 回调函数* @return {*} 取消监听的函数*/
export function listenMsg(handle) {const storageHandler = (e) => {const data = JSON.parse(e.newValue)handle(e.key, data.payload)}window.addEventListener('storage', storageHandler)return () => {window.removeEventListener('storage', storageHandler)}
}

来测试一下

test.html

index.html

看看效果
在这里插入图片描述

不得不说,真是太妙了!

http://www.lryc.cn/news/228199.html

相关文章:

  • Semantic Kernel 学习笔记1
  • 图像二值化阈值调整——Triangle算法,Maxentropy方法
  • 监控视频片段合并完整视频|FFmpeg将多个视频片段拼接完整视频|PHP自动批量拼接合并视频
  • client-go controller-runtime kubebuilder
  • 【vue 如何解决响应式丢失】
  • Selenium alert 弹窗处理!
  • 有关自动化的脚本思考 python 按键 javascript
  • CKA认证模块②-K8S企业运维和落地实战-2
  • SpectralDiff论文阅读笔记
  • selenium基本使用、无头浏览器(chrome、FireFox)、搜索标签
  • Html 引入element UI + vue3 报错Failed to resolve component: el-button
  • sen2cor安装
  • 通付盾Web3专题 | SharkTeam:Web3安全实践与创新
  • ARM Linux 基础学习 / Ubuntu 下的包管理 / apt工具
  • springcloudalibaba入门详细使用教程
  • C# DirectoryInfo类的用法
  • IDEA常用快捷键大全(详解)
  • 设计模式之解释器模式
  • 粉够荣获淘宝联盟区域理事会常务理事,携手共铸淘客新生态
  • Python爬虫是否合法?
  • 3.2 IDAPro脚本IDC常用函数
  • 用python将csv表格数据做成热力图
  • 【程序基础】递归法
  • AI 绘画 | Stable Diffusion WebUI的基本设置和插件扩展
  • 如何用自然语言 5 分钟构建个人知识库应用?我的 GPTs builder 尝试
  • rabbitmq启动异常解决
  • OpenGL_Learn08(坐标系统与3D空间)
  • github私有仓库开发,公开仓库发布版本
  • 绿色低碳 数字未来-辽宁省建筑电气2023年学术年会-安科瑞 蒋静
  • day55