QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel/ F" s/ j8 c! w9 t

' R" [% O# D. v, X5 Iconst sendMsg = new BroadcastChannel('logout_channel')# x9 E; e( l% L1 j& |7 W+ G
sendMsg.postMessage('清除缓存')
/ G) A4 Q) v: ], J% TonMsg.onmessage = async (event) => {' Z" f+ B& \+ N* g: \
   console.log('event清除缓存', event.data)
- I: @4 r0 d3 |) f. E, {}
3 Q) f) p3 e5 Y' O8 N( w
1 s6 \7 o* W$ o7 m: ~二. 使用SharedWorker
1 ?( H; M/ _  V) H1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
. G0 j5 j2 D; ?5 v7 s! ?: U( \" G  I- d+ I9 M  S
// shared-worker.js/ ^" v* p! J# s9 o) a8 }4 H9 B
onconnect = function(e) {
- d% c; J1 J. F% ~& U$ w  var port = e.ports[0];
6 G# f1 R5 o6 P* ]6 }, d& ?1 o2 F& G( r; a( i7 ~# ?4 n2 r
  port.onmessage = function(e) {% s* h: F- y1 A6 F9 M
    var message = e.data;
7 {/ I, c6 P! l! y4 z0 N    // 在这里处理接收到的消息
2 }( B! z; A; C. ^/ V8 F  };
" C; O. N* A* i  D% e1 U9 Q) F
1 a/ j9 s+ k% c! Y" Q. x  port.start();
1 ~/ R8 U' J. s6 c" z};
1 G# C1 p* {/ P# y* {1 m3 c! o' ~2 |- P2 I) J% ^7 c3 T5 H
在多个窗口中分别创建SharedWorker的端口,并发送消息。7 E/ ~: k  s! V3 O* v) q; |
// window1.js9 V6 t8 F! q9 T' ~6 ?9 y
var worker = new SharedWorker('shared-worker.js');
6 H8 `4 D9 v  x7 i8 U  [3 Lvar port = worker.port;4 n7 n# U  m$ P% I4 o7 y! s

3 G! E* v9 C* L. W' @4 P4 Aport.onmessage = function(e) {- ]" i5 F$ ]! T% Q1 k" m! Y  f4 p
  var message = e.data;
' t$ }' t, [0 v- Q# B  // 在这里处理接收到的消息
/ @2 ^  @1 O0 ^* G};: ^: [; C% h7 O2 D  D* |

6 H) h* V( s& ^port.postMessage('Hello from window1!');$ v) n- |4 ^: e6 o, O8 W

2 u7 `: r0 L6 Y/ y// window2.js6 t# h, t) j" z3 T5 u* Y7 ?$ _1 Z
var worker = new SharedWorker('shared-worker.js');" S9 X- d; q! ^4 X: a$ {4 x: N$ R
var port = worker.port;# I2 s0 v- u" |% Q; I# b

* V7 q8 Z, A& ^/ {" R; Qport.onmessage = function(e) {
0 X. D0 Q- v+ u  var message = e.data;
0 U1 K! e9 L9 y; F1 v" Z  // 在这里处理接收到的消息
, L# Q7 B- s/ }( [# C- O};5 X2 U, ?$ t8 x# w  G7 F

' o1 g! }* l( u9 Lport.postMessage('Hello from window2!');
" C! j1 h7 ~$ m% l9 t+ J2 E1 d9 u, a% \# g2 I, j
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
/ D- {' c5 A2 Q* l* R// shared-worker.js
: ?) i4 V9 D: p, {6 M' Uonconnect = function(e) {
1 q4 y! y, g$ s; \+ F8 y  var port = e.ports[0];1 Q  h$ K7 {2 U( a

0 `3 m5 N. O# G3 ]3 Q; C  port.onmessage = function(e) {
6 @& k1 @. n  `- U2 r4 d# R    var message = e.data;
0 E& j  ?+ d0 s9 k    // 在这里处理接收到的消息% M4 a4 i9 `2 V" j3 `  ^

7 M& U6 R( @+ B    // 向所有连接的窗口发送消息
% L! W& r% E! X+ G+ d    e.source.postMessage('Hello from SharedWorker!');% i2 ~/ r+ W; J" U+ x7 k+ ^
  };
9 u4 Q0 b! u# V2 ]: M& \
. y- q9 f6 S! @5 k  port.start();! [. f& w+ Q% }4 n. @, h
};% ^9 F' ]# W( i  _2 L7 p4 e
. M6 {0 Y. h- f% P

4 y) Z9 V0 T! E, |% p8 z7 @# G2 I; ?9 L1 I/ h, y
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-7-10 06:42 , Processed in 0.580736 second(s), 51 queries .

回顶部