问题

今天遇到一个问题,在商品列表页面,打开一个新增商品的页面,新增完后,商品列表要立刻显示新增商品,这就需要新增商品后,通知订单列表页,也就是常说的跨tab页通信。跨tab页通信,不仅包含常见的跨tab页,还包括跨window窗口、跨frame、跨iframe。

解决方案

同源下,可使用BroadCastChannel实现跨tab页通信。

  • 发送端

    • 如果重复创建相同名称的channel,j底层channel只会创建一次。
// If it is the first to connect to that broadcast channel name,
// the underlying channel is created.
// Connection to a broadcast channel
const bc = new BroadcastChannel('test_channel');
// Example of sending of a very simple message
bc.postMessage('This is a test message.');
  • 接收端
// Connection to a broadcast channel
const bc = new BroadcastChannel('test_channel');
// A handler that only logs the event to the console:
bc.onmessage = function (ev) { console.log(ev); }
  • 关闭
// Disconnect the channel
bc.close();

这种方法比较简单,可以传任何数据对象(字符串、对象、数字等等),也是我比较推荐的方式。

window postMessage 方式

除了使用上述方式,还可以使用window.postMessage,缺点就是要持有目标window的引用,当页面刷新后,会失去目标window引用;优点就是可实现跨域通信。

  • 发送端
//发送事件
targetWindow.postMessage(message, targetOrigin)
  • 接收端
//接收事件
window.addEventListener("message", (event) => {if (event.origin !== "http://localhost:8080")return;// Do something
}, false);

storage event方式

也可以使用storage event来实现,原理就是监听storage set事件,来达到同步,但只能发送字符串,另外当前页面也不会获取本页发出的set事件。

  • 发送端
//发送事件
window.localStorage.setItem("loggedIn", "true");
  • 接收端
//接收事件
window.addEventListener('storage', (event) => {if (event.storageArea != localStorage) return;if (event.key === 'loggedIn') {// Do something with event.newValue}
});

js 跨浏览器tab页通信相关推荐

  1. 浏览器tab页签上的title图标favicon.icon

    文章目录 浏览器tab页签上的title图标favicon.icon 什么是favicon? 如何查看favicon 在线生成favicon 浏览器tab页签上的title图标如何设置 浏览器tab页 ...

  2. 浏览器Tab页切换事件

    浏览器Tab页切换事件 /**** 浏览器Tab页切换事件*/ document.addEventListener('visibilitychange',function(){if(document. ...

  3. html 引入js 兼容,JS跨浏览器兼容性解决思路及方案汇总,常见JS兼容性知识点汇总...

    上篇文章我们介绍了,处理CSS浏览器兼容性的4个解决方案:浏览器CSS样式初始化.浏览器私有属性,CSS hack语法和自动化插件,有兴趣的可以看看,链接放到本文结尾 本文主要介绍JS的跨浏览器兼容性 ...

  4. js ajax 浏览器兼容,JS跨浏览器兼容,一点点总结

    不同的浏览器,对不同的/相同的属性.方法等的支持程度也会有所差别,要想达到满意的效果,需要做一些处理.给不同的浏览器量体裁衣,也就是所说的达到兼容. 常见的处理方式:(能力检测和浏览器检测) 1.三目 ...

  5. vue js监听浏览器tab页切换

    最近开发了需求,浏览器播放视频,切换到其他tab页面视频暂停,切换回来视频重新播放.监听属性addEventListener用起来啊. 一顿操作猛如虎-结果能监听到离开和回来,但是这时候页面的dom找 ...

  6. 自定义报表-FineReport JS实现隐藏Tab页

    1. 概述 1.1 问题描述 在实际项目中,使用决策报表的时候,有时会用到在决策报表参数面板获取报表控件的值,那么该如何实现呢? 1.2 实现思路 使用 JS 获取报表主体的控件值: _g().get ...

  7. js跨浏览器事件处理

    var EventUtil = {addHandler: function(element,type,handler){if(element.addEventListener){element.add ...

  8. 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解

    <javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = {// ...

  9. 实现浏览器多标签页通信

    前言 我们都知道浏览器是可以打开很多标签页的,如果每个标签页代表的是单独的一个网站,那么这些标签页之间肯定是不能通信的,如果能通信那估计我们都得凉凉.但是在很多情况下,浏览器中的很多标签页都属于某一个 ...

最新文章

  1. 接入网易云信IM即时通讯的微信小程序聊天室
  2. 转载 jsonrpc环境搭建和简单实例
  3. 【Clickhouse】问题记录
  4. SlideringDrawer的使用(抽屉效果)
  5. 简单易用的baidutemplate模板的使用
  6. 移动网站开发——标记语言
  7. 使用Aspect和Spring Profile进行电子邮件过滤
  8. Hyhyhy – 专业的 HTML5 演示文稿工具
  9. 小谈c#数据库存取图片的方式
  10. 基于dde的vb和matlab,基于VB和DDE技术的组态王通信协议转换
  11. 计算机网络之数据链路层:15、以太网、适配器、MAC地址
  12. 第一章 软件工程概论
  13. 计算机系统操作工中级工试卷,计算机系统操作工中级理论试题及答案.doc
  14. java 读写acr122u_使用ACR122U NFC读卡器对M1卡进行读写操作(可以读写中文)
  15. python没有pygame_pygame安装教程全程详解
  16. ipqc的工作流程图_IPQC的工作流程及检验流程
  17. 聂微东:《暗时间》读书笔记与读后感 - 博客 - 伯乐在线
  18. 金山WPS c++ 一面面经
  19. 利用计算机技术全面规划供应,英语翻译《物流术语》国家标准对供应链管理的定义:利用计算机网络技术全面规划供应链中的商流、物流、信息流、资金流等,并进行...
  20. ChatGPT在教育行业如何应用?

热门文章

  1. Android P Keyguard Scrim快速灭屏亮屏闪亮
  2. java微信多客服_怎么实现微信多公众号管理?有哪些多客服系统?
  3. week3 day3 迭代器和生成器
  4. 6 计算机网络 待更新
  5. 免安装mysql8.0
  6. Kettle的“增加序列”(自增字段)的使用
  7. CITAHub 社区成员开源 CITA SDK Python 组件
  8. jboot 配置durid + logback debug打印 sql+执行参数(非?)
  9. 46 同位语和同位语从句(以及) to/at/for/with 用法搭配
  10. 2018年考研真题计算机专业,2018年计算机考研真题及参考答案.pdf