QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |正序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
& H: f4 \* K1 ~( Q( _* m9 C% Q1 }. h& s( e8 l* s
const sendMsg = new BroadcastChannel('logout_channel')9 S8 o& {6 C6 N! n6 d
sendMsg.postMessage('清除缓存')6 s- j' R8 p1 B, D
onMsg.onmessage = async (event) => {: q1 ~2 B, Q. O  }- ^$ @( ?
   console.log('event清除缓存', event.data)% a. \4 T) G6 D1 i4 S+ w- [6 S  }/ `
}
9 m% i, A0 e' j% O, v2 R0 B% `
/ O  F$ ^9 ~% x9 i二. 使用SharedWorker
7 M. d, u4 v5 T( A+ u2 T1.创建一个SharedWorker实例,并在其中编写处理消息的代码。; g  B  a; ]0 h+ V# H

& a. j; {) |4 C2 G' E// shared-worker.js
, C8 t" b& `4 g0 |onconnect = function(e) {+ e# E/ t1 a3 A; M9 P; M- F
  var port = e.ports[0];+ J2 _* P' m* j5 M8 M8 n

, c/ t% Y7 Z3 I1 L! M8 B. p  port.onmessage = function(e) {6 b) H) \, i/ ^  O/ H
    var message = e.data;  o/ ^' W) b% R/ l- R  ~
    // 在这里处理接收到的消息; M: v/ o7 R- l$ s6 n; E
  };
) k& n5 s) B. ?6 p. K1 ?6 `# X3 y  z% U5 [- o; X
  port.start();9 x1 t/ E4 m6 C
};$ ?  C( q- V6 x5 P. f, ~

. j8 h9 Y; \7 q. h; z. |  s, b在多个窗口中分别创建SharedWorker的端口,并发送消息。1 ?/ V' {  V8 i
// window1.js, H- ^/ G! f- I7 n
var worker = new SharedWorker('shared-worker.js');2 v; s: q" D" k. |( N
var port = worker.port;
' S" A: B! b. V. C
0 _( I- R, G0 ^7 J4 Hport.onmessage = function(e) {
  b- e$ n( w: v/ R  var message = e.data;
+ }2 O# S5 @1 t  // 在这里处理接收到的消息
& x+ W: O, n4 `' H7 L8 q};
! h4 i: R' B, }2 x/ K( ~, [
, Q$ I3 j! R4 t! Hport.postMessage('Hello from window1!');
0 ^+ K4 q3 j/ `6 }! r# q# z8 a: ^, p2 v) A! A; K
// window2.js+ K$ g1 x( E, F! \7 P
var worker = new SharedWorker('shared-worker.js');
$ ~4 E6 W2 `1 s# ^* H0 p- }var port = worker.port;
3 c7 I: u8 s) t' M
' q% `5 I9 f: S* V1 E5 h! g3 Sport.onmessage = function(e) {
* q& y6 ?/ G" s- b  var message = e.data;
1 p; y' x" W3 q" M  // 在这里处理接收到的消息; o3 f4 [6 h3 q. j$ I. \* h. f7 l
};; h" |  T! F9 x8 N- Z% K8 T" m

3 W6 |* @9 A4 G% _3 D) @% Yport.postMessage('Hello from window2!');$ ?9 T5 k2 L# Y; p. V& |3 g% i1 p
! v2 `8 ?: C7 }5 e* U
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
; x1 h7 H, ^( s7 `// shared-worker.js
8 v7 {, V/ X; ~- [/ H5 conconnect = function(e) {
! U$ u6 o# W) K. q  var port = e.ports[0];& X8 d  C" b: o; S& H

, ^0 W. W  |2 r0 a- g  port.onmessage = function(e) {
" A5 j* O4 `' L$ x    var message = e.data;
3 C7 k0 V( I( r6 }" |/ g( x0 X5 _    // 在这里处理接收到的消息
" v6 \2 A$ l1 j. r7 ]  i% f* H& ]8 j, F& [: Y. R4 l( A
    // 向所有连接的窗口发送消息& R# ^6 E0 E+ Z1 o7 }# z
    e.source.postMessage('Hello from SharedWorker!');- \  F0 u3 C; F- Q
  };
' G4 c2 H9 [4 `: l' y! @# r4 s, e  a
  port.start();
' A# R- f5 U8 R1 F& x+ j};
5 N0 ^/ y% Z8 t6 M; Q( T
+ R$ I+ O$ P/ i4 Q, m" f. P0 U
) D& p: A  \9 I6 O0 i! m3 W; B& |5 {: j0 }/ e
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-4-13 16:44 , Processed in 0.745015 second(s), 52 queries .

回顶部