QQ登录

只需要一步,快速开始

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

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

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

1198

主题

4

听众

2978

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel% T- s6 h* J' h8 E8 F: f

+ Z0 _3 v6 R, q% ~9 i, |4 F) cconst sendMsg = new BroadcastChannel('logout_channel')
: P; [% ^% {6 w& x4 msendMsg.postMessage('清除缓存')
$ ~( W/ F$ M$ F5 D! ronMsg.onmessage = async (event) => {8 M& u1 b$ ~" s/ U, [1 L
   console.log('event清除缓存', event.data)
9 P+ Y0 B# e! C0 S6 U}
+ Y7 q% c1 j8 [6 H' x  d8 ?
$ V! N' q& F: K6 E( K  f3 _二. 使用SharedWorker' ~4 A3 L. F7 m! f' k# @
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
9 @# I. Z9 t7 z& K
9 h$ E) W2 g0 ~0 F' A// shared-worker.js
) w& F% J/ y& \' X8 [9 ionconnect = function(e) {
3 z. N8 ^1 M! G2 p, C0 F5 F6 A7 b  var port = e.ports[0];! p2 t: j. y6 S, e4 @4 c- ^

; H* Y4 I0 T' M2 e1 J  port.onmessage = function(e) {. h* e1 k7 T- Z7 y. N
    var message = e.data;% p  C3 h3 c3 B6 v. _0 ~
    // 在这里处理接收到的消息! W3 s& [* {! {
  };
* Q9 ^$ b3 p( {8 O& m1 I8 v" K; u% n& ]
  port.start();, J+ H1 E3 g$ H, \. ~; W
};! f! o) A! M) O) @! E/ U* j
0 W' E( f0 l, j! o
在多个窗口中分别创建SharedWorker的端口,并发送消息。2 \' Q9 ?$ }7 O* l+ {2 M* {  s
// window1.js
6 j8 r, ^* r3 Z- t. @7 Ivar worker = new SharedWorker('shared-worker.js');  F( V; R# `7 p9 h- v
var port = worker.port;
, S9 ^% x+ p# P) H% `* z; A9 Q; ~8 C& W5 V! }
port.onmessage = function(e) {0 _6 b1 h# P9 Z1 J
  var message = e.data;& F- |0 X. S9 N; |
  // 在这里处理接收到的消息
& Z/ Z. q* }! o1 e- B8 }; a};
/ q& y; t' {' N* O# W7 I$ M; j4 e$ i( f3 B$ \0 k
port.postMessage('Hello from window1!');5 w- j: I6 V8 y# W% @9 h3 G7 y/ \

" ^. G) [6 d) ~. B; C. R8 F// window2.js/ ?7 s. n( e( g( e
var worker = new SharedWorker('shared-worker.js');
7 I8 H- v8 o5 |6 U& xvar port = worker.port;
7 w+ H& q7 ?$ M* ]4 E8 g. r. [
) N$ J: r" _- X+ I" E: I) [) pport.onmessage = function(e) {$ h: A2 H9 V. V. G) E
  var message = e.data;
8 V3 R8 J# r4 H, l" ]  // 在这里处理接收到的消息
6 S: p" r6 T. h! M};2 `% Q! d: V" C, I' Y. O/ m" V

  [2 W+ H9 G. X8 Q* j4 t9 Iport.postMessage('Hello from window2!');
4 o: x- j5 v+ S; b0 {
$ H2 k( `/ }2 q& {在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。5 \; y0 A) b  N5 x! C
// shared-worker.js
4 j4 V) {3 I6 p; {onconnect = function(e) {
7 E7 w# b, N" f8 ?, R' \  var port = e.ports[0];
7 X& K" f6 @& v
2 o$ b$ P$ X; s5 h1 {$ E. A0 r  N  port.onmessage = function(e) {
9 U) h& g& j. v  J  v3 D2 G9 E! g    var message = e.data;
# t' @; O5 J$ E6 R# [. a7 w& @1 D8 r    // 在这里处理接收到的消息
: {+ i6 b- l1 `# g! _: [% a+ Z5 J. X/ Y7 s4 c7 z
    // 向所有连接的窗口发送消息7 I2 g6 D# g; T8 a; U) ~
    e.source.postMessage('Hello from SharedWorker!');
2 K- V% j0 S! T3 a& d  };: J. c+ P% I& L

9 {; Q: B6 Q' ~6 b/ e7 |  port.start();3 I$ B4 H  L# z4 v/ i
};' @+ D( V9 ?2 K& J

2 W1 H; ^) s  m$ B% K7 ?9 s) D" V; \2 u

- j; n5 h0 A) r7 r) b7 M  D8 w' Y! f  w
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-10-14 07:07 , Processed in 0.291302 second(s), 51 queries .

回顶部