js实现浏览器不同页签之间通信

一. 使用BroadcastChannel

复制代码
const sendMsg = new BroadcastChannel('logout_channel')
sendMsg.postMessage('清除缓存')
onMsg.onmessage = async (event) => {
   console.log('event清除缓存', event.data)
}

二. 使用SharedWorker

1.创建一个SharedWorker实例,并在其中编写处理消息的代码。

复制代码
// shared-worker.js
onconnect = function(e) {
  var port = e.ports[0];
  
  port.onmessage = function(e) {
    var message = e.data;
    // 在这里处理接收到的消息
  };
  
  port.start();
};
  1. 在多个窗口中分别创建SharedWorker的端口,并发送消息。

    // window1.js
    var worker = new SharedWorker('shared-worker.js');
    var port = worker.port;

    port.onmessage = function(e) {
    var message = e.data;
    // 在这里处理接收到的消息
    };

    port.postMessage('Hello from window1!');

    // window2.js
    var worker = new SharedWorker('shared-worker.js');
    var port = worker.port;

    port.onmessage = function(e) {
    var message = e.data;
    // 在这里处理接收到的消息
    };

    port.postMessage('Hello from window2!');

  2. 在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。

    // shared-worker.js
    onconnect = function(e) {
    var port = e.ports[0];

    port.onmessage = function(e) {
    var message = e.data;
    // 在这里处理接收到的消息

    复制代码
     // 向所有连接的窗口发送消息
     e.source.postMessage('Hello from SharedWorker!');

    };

    port.start();
    };

相关推荐
支撑前端荣耀几秒前
从零实现前端监控告警系统:SMTP + Node.js + 个人邮箱 完整免费方案
前端·javascript·面试
重铸码农荣光4 分钟前
🎯 从零搭建一个 React Todo 应用:父子通信、状态管理与本地持久化全解析!
前端·react.js·架构
用户4099322502124 分钟前
Vue3 v-if与v-show:销毁还是隐藏,如何抉择?
前端·vue.js·后端
Mr_chiu5 分钟前
🚀 效率暴增!Vue.js开发必知的15个神级提效工具
前端
先知后行。5 分钟前
python的类
开发语言·python
shanLion5 分钟前
Vite项目中process报红问题的深层原因与解决方案
前端·javascript
烟袅7 分钟前
从零构建一个待办事项应用:一次关于组件化与状态管理的深度思考
前端·javascript·react.js
前端小万10 分钟前
草稿
前端
派大鑫wink11 分钟前
【Day12】String 类详解:不可变性、常用方法与字符串拼接优化
java·开发语言
闲云一鹤12 分钟前
将地图上的 poi 点位导出为 excel,并转换为 shp 文件
前端·cesium