QQ登录

只需要一步,快速开始

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

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

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |正序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel, R9 h% R8 S2 S5 F: ^' v
4 W* B! ]# T, N5 G" K
const sendMsg = new BroadcastChannel('logout_channel')- _% j! S8 R. s0 }. G* x
sendMsg.postMessage('清除缓存')2 ^# ]7 W5 O5 P6 f& E5 Y' T" K8 Y
onMsg.onmessage = async (event) => {1 Z8 I9 ~9 ]) q% M6 Q0 J/ U$ V  R
   console.log('event清除缓存', event.data)
8 H( [; y! v, i% {( D' }# o3 M}- d  Z! y5 X; J7 h: Z; O' c

! Q# v  N: c1 H1 W9 Z  ]) m2 L二. 使用SharedWorker
" m9 q6 h+ f! R$ W8 l1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
+ ^( _# Y0 m7 E5 T% N* I: [7 x3 k! w2 f8 u
// shared-worker.js
! E" N' {+ A8 W/ t; xonconnect = function(e) {5 F8 M$ R% [! M+ M
  var port = e.ports[0];( F; o# H  @0 ~, s$ I

. d; |/ t: j' w1 I* }1 ?) m  port.onmessage = function(e) {
% q! D7 H4 `! n! N6 m0 b3 d9 X    var message = e.data;+ o  i2 e' ?8 g+ |9 I& o1 X
    // 在这里处理接收到的消息
+ c5 @; f" Z& ]  };
# H: @' {9 x; u, X) j  J. }5 X2 q5 Y. X) B% V4 W0 c/ a8 U
  port.start();
  K! Z* z# A. y# q};
% O. c5 t  k. g  B
' U+ ~" F8 N. [7 t3 Y( x# n& J在多个窗口中分别创建SharedWorker的端口,并发送消息。
% K6 U2 I. s) U. ~: `5 Q7 z// window1.js& E2 F* G( T; c4 I
var worker = new SharedWorker('shared-worker.js');  K( p5 ?  O, Z9 D, W6 s
var port = worker.port;: s$ _' I8 P9 K; A
  e3 K4 S7 K; A3 Z* y8 d7 Y7 p
port.onmessage = function(e) {0 f4 V% L9 b: e% s/ j
  var message = e.data;7 q3 Q! n4 V5 J3 J8 ^$ s6 o# _
  // 在这里处理接收到的消息
+ }, G+ b! X. |3 P6 A: K! w};
1 o# J" j. z- t. p9 H% J/ _+ q% V; J0 w; B2 K- k9 h, ~
port.postMessage('Hello from window1!');0 P5 Q# ?  z. @) }1 ~& B. X2 c
$ }9 W* ?* p) g8 w
// window2.js
) c" q, U6 t" ?var worker = new SharedWorker('shared-worker.js');9 }" a" S* b, O7 [- l( Q. G' T
var port = worker.port;
3 H# V8 ]+ V8 b1 {" h) N8 Q( _- C: Y; \1 |% r4 k; L
port.onmessage = function(e) {' z5 b- v/ ~( o# j
  var message = e.data;0 {9 t, w! {6 F! s4 u
  // 在这里处理接收到的消息  n' j$ c& }$ S: c
};3 }! C) A" ^7 D' c5 Q1 m* J" x0 n

2 `7 y1 x; z5 c! X$ Vport.postMessage('Hello from window2!');5 K, H& A8 P7 F; w& i* w

+ x# \( l! Y9 [* P在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
; J: r! L% K# z// shared-worker.js
/ G$ P% E' T! [% c6 w  }5 Konconnect = function(e) {  U% v$ _; J* h/ p- _/ ?1 H) y
  var port = e.ports[0];* C% e, N2 B9 v3 Y! K
$ V( u" L1 O9 O4 k" C
  port.onmessage = function(e) {
$ o' M$ K% n# U% o. v% S/ _+ P    var message = e.data;) k( ~" g9 D% b. I1 \8 Y. ~1 X
    // 在这里处理接收到的消息
# N. V5 ?$ C; [  V2 L( S3 {' J
9 c% Y& h* n) v    // 向所有连接的窗口发送消息7 D% N! J: N) t. [4 G5 Q9 I8 a9 W
    e.source.postMessage('Hello from SharedWorker!');
: |; @! g& j" J/ c1 r) j  };
8 d" e' \7 e+ E! j
$ q# d4 y6 s$ \% y" _0 X! V/ b9 j  port.start();
* a3 d8 j* ~! Q; e! n: ^};* Y/ T5 V1 h& |) w# b" g1 g

8 D# B( B; b; s9 V, B' a3 g0 E% _
9 N/ q, |2 o3 J0 T/ ]) t1 f
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-9-26 07:22 , Processed in 0.999483 second(s), 51 queries .

回顶部