浏览器标签页之间的通信

news2024/12/23 22:44:17

前言

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

如果用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.coloradmin.cn/o/1191783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis-plus 内部提供的 ServiceImpl<M extends BaseMapper<T>, T> 学习总结

作用 当集成Mybatis-Plus 后,我们的大部分数据库操作都可以通过 XxxxxMapper ,同时 Mybatis-plus 在Mapper 提供基本操作方法的同时,也提供类基础的 serviceImpl 来帮助我们完成一些常见的基本操作。 使用 一般情况下,我们首先…

腾讯云真的是良心云!服务器带宽、CPU、硬盘IO性能大揭秘!

本文将通过对腾讯云服务器CVM S5 4核配置的云服务器进行测试,来评估其在带宽、CPU和硬盘IO性能方面的表现。 在云服务器的并发处理中,带宽是一个重要的因素。经过测试,腾讯云的带宽网络表现非常出色,能够跑满带宽,同时…

1.linux极速进阶

目录 概述文件相关vi文件编辑查找字符串查找某一行内容复制粘贴快速删除快速跳到文件首行和末行 进程相关ps/netstatjpstopkill linux三剑客grepsed添加方面操作删除方面替换操作 awk 结束 概述 身为后端开发,大数据平台搭建,对 linux 系统的操作最起码…

React的refs和表单组件总结

React的refs和表单组件 react中refs的使用字符串形式的ref react核心就在于虚拟DOM,也就是React中不总是直接操页面的真实DOM元素,并且结合Diffing算法,可以做到最小化页面重绘,但有些时候不可避免我们需要一种方法可以操作我们定…

pip 安装任意软件包报错

现象 使用 pip 命令时提示 查看源码 可以看到是从 pip 包中导入 main失败,点击查看目录 main 文件不见了,判断是文件缺失,重装 pip 即可 # python3 下载 pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # python2 下载…

精密设备企业适合哪款CRM客户管理体系?

精密设备企业致力于打造现代化管理体系,以精密的仪器、精细的销售、精准的市场、精确的售后为企业核心,提供优质的精密产品和专业服务。随着企业的发展及市场发展需要,建立高效的客户关系管理体系势在必行。那么,精密设备企业适合…

C#医学检验室(LIS)信息管理系统源码

LIS:实验室信息管理系统 (Laboratory Information Management System简称:LIS)。 LIS 是面向医院检验科、检验中心、动物实验所、生物医疗研究所等科研单位研发的集数据采集、传输、存储、分析、处理、发布等功能于一体的信息管理系统。 一、完善的质控: 从样本管理…

Java 并发编程面试题——Condition 接口

目录 1.Condition 接口有什么作用?2.如何使用 Condition?3.Condition 中有哪些常用的方法?4.✨Condition 的底层实现原理是什么?4.1.等待队列4.2.等待4.3.通知 (1)参考书籍: 《Java 并发编程的艺…

学者观察 | 联邦学习与区块链、大模型等新技术的融合与挑战-北京航空航天大学童咏昕

导语 当下,数据已成为经济社会发展中不可或缺的生产要素,正在发挥越来越大的价值。但是在数据使用过程中,由于隐私、合规或者无法完全信任合作方等原因,数据的拥有者并不希望彻底和他方共享数据。为解决原始数据自主可控与数据跨…

Mysql 和 Redis 数据如何保持一致

先阐明一下Mysql和Redis的关系:Mysql是数据库,用来持久化数据,一定程度上保证数据的可靠性;Redis是用来当缓存,用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致(即缓存一致性问题&#xf…

企业实施MES管理系统会增加哪些工作量

随着制造业的快速发展,越来越多的企业开始关注如何通过技术手段提高生产效率和质量。MES管理系统作为支撑企业生产管理的关键系统,受到很多企业的青睐。然而,对于是否部署MES管理系统,很多企业存在顾虑,担心其会增加工…

Python 3D建模指南【numpy-stl | pymesh | pytorch3d | solidpython | pyvista】

想象一下,我们需要用 python 编程语言构建某个对象的三维模型,然后将其可视化,或者准备一个文件以便在 3D 打印机上打印。 有几个库可以解决这些问题。 让我们看一下如何在 python 中从点、边和图元构建 3D 模型。 如何执行基本 3D 建模技术&…

overflow: auto滚动条跳到指定位置

点击对应模块跳转页面,滚动到对应模块,露出到可视范围 代码: scrollToCurrentCard() {// treeWrapper是包裹多个el-tree组件的父级元素,也是设置overflow:auto的元素let treeWrapper document.getElementsByClassName(treeWrapp…

Kafka JNDI 注入分析(CVE-2023-25194)

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SAS…

赞不绝口!飞凌嵌入式全新子品牌ElfBoard好评如潮

飞凌嵌入式凭借十多年的企业级板卡开发与服务经验,深挖嵌入式学习市场的需求和痛点推出全新子品牌ElfBoard,旨在为嵌入式学习爱好者创造更具价值的学习体验。 ElfBoard旗下ELF 1及ELF 1S两款新品已经上市1个月了,两款开发板产品凭借高性价比…

假如我们进入了时间循环,那么如何在时间循环里做最优决策?

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

温湿度监测更方便,食品物流很多都这样做!

在当今高度技术化的社会,温度监控不仅仅是一项科技应用,更是各行各业中确保稳定运作和产品质量的重要环节。 温度监控系统的应用不仅有助于维护生产条件,提高效率,还对确保产品质量和符合行业标准起着至关重要的作用。 客户案例 …

直播实时数仓基于DataLeap开放平台在发布管控场景的业务实践

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 背景 业务背景 随着字节业务的高速增长,业务场景越来越丰富,业务基于数据做的决策也越来越多,对数据的时效性要求也越来越高。…

CSDN中调整图片和文本样式

1.调整图片比例 插入图片后,觉得图片比例不协调,想改小点。只需要在文件后缀加个参数即可:?pic_center 60x。 NOTE:等号左边一定要加个空格,否则格式不生效 2.修改字体颜色 如上 NOTE:等号左边一定要…

搭建完全分布式Hadoop

文章目录 一、Hadoop集群规划二、在主节点上配置Hadoop(一)登录虚拟机(二)设置主机名(三)主机名与IP地址映射(四)关闭与禁用防火墙(五)配置免密登录&#xff…