数学建模社区-数学中国

标题: js实现浏览器不同页签之间通信 [打印本页]

作者: 2744557306    时间: 2024-3-29 17:50
标题: js实现浏览器不同页签之间通信
一. 使用BroadcastChannel' N, V3 _. q# D8 ?

0 N: q3 d/ T" M  _3 Iconst sendMsg = new BroadcastChannel('logout_channel')# \9 f& {: Y! g4 T
sendMsg.postMessage('清除缓存')6 v0 @+ n. N# U9 s  v  \
onMsg.onmessage = async (event) => {
, ^1 a/ P' g4 n1 F/ l  [   console.log('event清除缓存', event.data)
. A9 X/ L; A+ I( Q8 v: i: C}/ O+ ]1 D1 d. B, A, Q* W
) O8 Z5 s) Z; Q; O0 I$ F' M+ O3 Y
二. 使用SharedWorker
. J. T: y0 w( @! m& j5 m; ?, C, N: ]1.创建一个SharedWorker实例,并在其中编写处理消息的代码。0 K! c" c, r5 F$ V! m; m
  h0 S- D# w/ J. G
// shared-worker.js
& S8 O. _* c5 ]5 m! l- ~6 e" monconnect = function(e) {
% p" f% N2 g+ @" N2 J  var port = e.ports[0];
% c  X3 e1 T( c0 g9 h9 \8 n+ p2 s0 Q2 y1 `5 B6 f' R2 Q, S( K
  port.onmessage = function(e) {$ a% S- t) @& y9 T0 f
    var message = e.data;% t% M9 p0 \! J" O9 t8 X5 t
    // 在这里处理接收到的消息
- ]% m9 ~+ U1 V3 @4 K8 [  };* O) N8 f/ K5 @& q) I7 t3 [1 p7 J

+ w+ l( M+ _- J2 ?8 c. ]  port.start();8 r: E, D2 L5 B+ Q* g
};
# u: |# f- V+ `' e0 a0 D
; d& f6 [; N. N8 g4 y在多个窗口中分别创建SharedWorker的端口,并发送消息。
  D' l, d' h# b% i1 p) f1 j) t// window1.js" ~7 w3 e3 [9 \
var worker = new SharedWorker('shared-worker.js');% o! ]. ^0 s+ P9 h5 Y# _
var port = worker.port;5 w" {4 r/ D9 }! z, e" n$ ~& }& O
. m( U, }1 F  i, Y; S
port.onmessage = function(e) {
. Z- q+ `3 F7 w  var message = e.data;2 \, B' L) n5 h' Q; ]
  // 在这里处理接收到的消息( V# i/ ?3 H& q" A  d! V* d& g
};
/ b( k' X: i/ a9 s- o" \2 z+ Y3 I' Z
port.postMessage('Hello from window1!');, R) Q& t+ J& m) o6 h
2 `  S) A( V- c) B* f3 G8 r1 u
// window2.js+ u8 J4 F9 h0 p& z6 X) u- m5 H* |. t
var worker = new SharedWorker('shared-worker.js');  N! @, E# V* O7 w, I* m
var port = worker.port;5 i( u+ z1 q- c& @, {

  A8 H6 b( o4 |2 Y6 z6 Aport.onmessage = function(e) {0 N) e% T+ y- d3 h) w0 ?% k8 G: b
  var message = e.data;' ?! k+ M6 S. r
  // 在这里处理接收到的消息
3 l8 }8 p3 b- u7 [! A};" H) {8 d( o0 R+ k& U

4 O1 E( e0 r8 g) t0 ]; _port.postMessage('Hello from window2!');: g0 e# o$ [& M% |; r& P, N

$ ^) |$ K; B7 w3 O2 V在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。6 u: A3 ]# o; O1 M1 \8 G- ^# F2 G- E
// shared-worker.js. K. J; }- p; `6 D+ \. u! w
onconnect = function(e) {# M: a( L2 r# O; z8 r6 N. v$ |
  var port = e.ports[0];
+ K, p. q8 G, |' n0 T$ ~; X. B) g! m& F4 H5 i  I) W" }
  port.onmessage = function(e) {
2 Z: |3 Y8 ^5 L: r    var message = e.data;
* E0 p& A9 V6 z  ?2 R    // 在这里处理接收到的消息
- K0 V0 h2 A, ?6 r# W: y$ O7 T& R$ |
    // 向所有连接的窗口发送消息
6 t9 u; T8 w1 O$ {' `    e.source.postMessage('Hello from SharedWorker!');# W6 |* ~+ `$ q# |* Y6 P* R  s
  };
0 E$ C/ Y2 o6 U! {3 V  e9 L6 v& Q" T! z" F' q& x( P1 E& N  `
  port.start();0 ^- y5 d) E9 w& j! b, d
};2 w3 h1 G: H3 M
' X, [- h( h( S' w- r6 f4 N6 ?

5 i8 A! c" y) O- F* D" A+ c1 T8 P) p5 n





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5