QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1855|回复: 0
打印 上一主题 下一主题

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

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
. @6 E: p' y- G! f. u7 \- n
" V; m% l. e1 P- a0 j0 {const sendMsg = new BroadcastChannel('logout_channel')
$ A# u7 ?* ~8 X7 BsendMsg.postMessage('清除缓存')9 M) a/ r7 G. v: |( o
onMsg.onmessage = async (event) => {
; |0 e1 [' }7 ^# q   console.log('event清除缓存', event.data)4 e( S6 Q/ t" z: |, o' d
}) s+ }( T& ?, g
6 B3 s+ I' B' `2 s4 u
二. 使用SharedWorker
+ L6 n6 a& z" d+ a. }1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
( _3 G2 T5 S! c5 c- f
7 ~, @) s' x8 N" n// shared-worker.js2 c5 b6 i' A- q8 F/ I
onconnect = function(e) {& x2 J2 P+ `0 Z% o# j/ B
  var port = e.ports[0];
* x5 ^1 W: i" G! J. ~/ x* M+ t7 Z& {7 k# m) i, T
  port.onmessage = function(e) {
# ]: S3 _/ e$ M. |    var message = e.data;
. g) M* ~7 R7 T+ U& K9 E    // 在这里处理接收到的消息
  r+ k8 g! x" I; F0 ~  };9 z1 e  T, E/ }- b

# Q* `" T  z7 p5 M6 C. H  port.start();
7 l  I8 w9 ~, {};
* R+ t5 _5 }. d4 j
" a+ w6 D' Z- ^在多个窗口中分别创建SharedWorker的端口,并发送消息。
8 n1 d6 j3 @4 m1 N3 \& f// window1.js4 D$ A3 |( P+ }- k4 J
var worker = new SharedWorker('shared-worker.js');
" c5 e6 X1 J: E6 s) h) Qvar port = worker.port;7 {  I) q/ L- }* U
& j; Y6 E1 ^0 m) S! Y+ _
port.onmessage = function(e) {% R0 k! \9 w" b$ z7 [
  var message = e.data;6 {$ B% ~+ }* Z( o% M" i4 S' z# y$ C5 \$ ]
  // 在这里处理接收到的消息. l( {' a) |( a  F2 x2 n: S+ D
};
/ e, I  j! l# `" l- |$ K, \" M- V+ D( d6 S# ^# Q
port.postMessage('Hello from window1!');. H4 E0 O4 H/ s
: b+ |( X4 K' g* U
// window2.js" C: \! h8 ~; U, b+ J. `! Y/ b
var worker = new SharedWorker('shared-worker.js');
! B) `: ^3 S5 H  Z4 q0 ?var port = worker.port;. A$ l% e2 j7 C* {, P+ Q

  M4 A  ^4 N. n9 ?" ]5 [port.onmessage = function(e) {& U; k1 X$ C# W! N
  var message = e.data;$ V6 n+ j6 x5 l# g$ v1 U
  // 在这里处理接收到的消息
+ P$ W% @" F; v};
+ Z% Y" [. N! h5 u
, P3 S6 E" j, d3 P' ^+ Pport.postMessage('Hello from window2!');
3 L# x; i+ ?' @, P" X
% F! l' J1 t6 b( U+ H8 ^' \在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
  k' _4 _' K& R1 r// shared-worker.js
8 l: e# w: r, x+ ]onconnect = function(e) {
! C! T  k" b' \7 p' O! y  var port = e.ports[0];
4 K* ?& c* @" v) ]0 ?7 q5 {* e8 L, r* T( T7 a7 {2 S" v
  port.onmessage = function(e) {( _2 o/ [/ J4 t! D% p
    var message = e.data;
3 [5 G. G9 M# v' z7 c    // 在这里处理接收到的消息
: ^9 h( F" \; @0 D* b3 N8 K2 z* t. G3 N% g
    // 向所有连接的窗口发送消息+ r& T0 n! s0 a1 Q: M) s) v
    e.source.postMessage('Hello from SharedWorker!');0 Q  j% o6 M- O. c. i& I. B
  };
  [6 ^9 a: h! L+ h- P  U& U
# ^+ [  U9 R3 P0 C# w& @  port.start();
; c6 K; f3 N' ]4 s5 E2 N4 K. _/ L: T};
7 c1 k5 p2 p/ i) o* X1 i
6 `+ A2 l- K9 y+ _
; i! D# }& Z8 G2 F6 f  Q( K" c
, K; M  Q" x$ \
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-1 12:59 , Processed in 0.415821 second(s), 51 queries .

回顶部