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();
    };

相关推荐
手可摘星河2 分钟前
php中 cli和cgi的区别
开发语言·php
敲啊敲95275 分钟前
5.npm包
前端·npm·node.js
CodeClimb14 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
咸鱼翻面儿18 分钟前
Javascript异步,这次我真弄懂了!!!
javascript
brrdg_sefg19 分钟前
Rust 在前端基建中的使用
前端·rust·状态模式
CT随25 分钟前
Redis内存碎片详解
java·开发语言
anlog34 分钟前
C#在自定义事件里传递数据
开发语言·c#·自定义事件
m0_7482309443 分钟前
Rust赋能前端: 纯血前端将 Table 导出 Excel
前端·rust·excel
奶香臭豆腐1 小时前
C++ —— 模板类具体化
开发语言·c++·学习
qq_589568101 小时前
Echarts的高级使用,动画,交互api
前端·javascript·echarts