QQ登录

只需要一步,快速开始

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

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

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
% S8 O- d$ C! S: t- ]1 n) g: x7 n5 q- u$ @* D9 N2 y
const sendMsg = new BroadcastChannel('logout_channel')) `2 ~$ `9 O, S+ D/ D+ t* n0 s
sendMsg.postMessage('清除缓存'). }/ ?* Q3 T& \# V( E( C- c$ O  I% _9 d
onMsg.onmessage = async (event) => {
; c+ x& l% a5 z6 }& P: O   console.log('event清除缓存', event.data)
+ u0 o$ u! w5 P5 D& B; \}
5 m% D+ r2 B- K4 u2 ^& B* w. D
, v4 F: Z& A' X$ K; V二. 使用SharedWorker
. \2 h6 b0 X9 e. H" T7 R1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
! e/ h3 ]8 \  u; {: Y6 U: ~" J7 t/ J& t1 n% W( u- d0 u
// shared-worker.js1 ^, A, u, r  ?7 }1 n
onconnect = function(e) {: @  |# x  `2 D% I; {& p
  var port = e.ports[0];+ q1 m0 U% i& J$ v

' [1 c4 z9 V0 J' i: L6 c# H8 `- I  port.onmessage = function(e) {
8 }. M* p( e9 S* E- T    var message = e.data;# x" E- d' d9 r: o
    // 在这里处理接收到的消息
4 S# g" [, C0 ]5 x% s+ V' C  };
7 s2 o4 `  }0 `& [8 H' F. s/ f: o+ \; i5 f8 ~2 I; x
  port.start();* j+ B* Q6 `7 g8 D) K
};
0 y; z3 N  |" R& |1 t; T% d% Q: {+ m" [8 E! Y3 L4 N+ A; u) J
在多个窗口中分别创建SharedWorker的端口,并发送消息。7 G0 s. H" a# h
// window1.js
6 M' n. p8 @* F' ~* C3 Dvar worker = new SharedWorker('shared-worker.js');
2 X. T3 J. g1 nvar port = worker.port;! K' h2 `9 e/ G8 P
9 ^/ z( Q) @6 g
port.onmessage = function(e) {/ q, S, H" \1 z1 d
  var message = e.data;" e2 J4 o5 a+ D' h: \. v( K
  // 在这里处理接收到的消息
8 \' k: D" [) I% F& T};5 w' l- ^0 ]5 `. m6 X5 @
! q' u% T1 s/ ~, {2 e
port.postMessage('Hello from window1!');/ i: c! o7 Y/ r7 ~( p
+ e% Y& [. Q5 ~2 g( m
// window2.js
* N$ p9 g0 {, B' ^6 Gvar worker = new SharedWorker('shared-worker.js');
" k3 J; M- A, A4 p/ evar port = worker.port;
- P& g3 T5 M. C8 I0 y% d# ^+ J# ]8 N" B) e/ I
port.onmessage = function(e) {) f9 ]% F9 q% V' c+ B
  var message = e.data;3 c( P( t# n* t, z  q. t
  // 在这里处理接收到的消息
% ^4 f+ {; j) |0 ]# A/ ~};
3 k8 W7 {. F# T  @3 T$ V: U6 |% Y/ a1 n0 h! X% D$ b! D! ~
port.postMessage('Hello from window2!');8 `1 O" o( Q1 \& n# c1 G$ l
3 R& a+ \8 `" H3 l& I& T! ~
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。) Z: h" U* P! |  L# w" y! }
// shared-worker.js
( n7 y5 H4 B2 c$ K) z' Vonconnect = function(e) {4 O, z+ m3 o! t" N
  var port = e.ports[0];
1 E' S5 d8 a+ V) i; e' A" S: R3 D
6 _, `# A. s  {+ z% c  port.onmessage = function(e) {4 Q9 X- S6 J. s/ x4 P: Z
    var message = e.data;: z; q. y' f* C6 i% }
    // 在这里处理接收到的消息
" b0 c. d! |; A* q4 E: b- V1 u' _! @/ \( x3 p) ], |: N* P9 ^- m
    // 向所有连接的窗口发送消息
& \, o! Q2 P) O" @* L8 @    e.source.postMessage('Hello from SharedWorker!');. q' K, S6 i# ]- o+ H: ^. A- }
  };
6 R7 V2 P# P4 I5 ]. r" h+ ?- o, B- u4 u4 m, d+ q. H$ q
  port.start();
& ?% e7 |* h% t' D; @};4 l& c9 U  {8 R$ o6 b) G
, d1 v, }6 Z# F9 N8 t, _

- q; }5 |3 t; y5 o3 }
5 r2 M1 z5 D0 i% u9 D; L
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-27 15:18 , Processed in 1.553413 second(s), 51 queries .

回顶部