?) F& Q* o$ v( I1 `0 D9 R! Dconst sendMsg = new BroadcastChannel('logout_channel') ! J) a ^; N$ z2 osendMsg.postMessage('清除缓存') : h) V5 n I* L4 W0 X8 xonMsg.onmessage = async (event) => {# @! z% P) y4 |2 U! i" h, [9 f
console.log('event清除缓存', event.data) ) s- z" L0 E! s* b8 l) G- c} . x; M3 S/ d# m+ t _9 W% I0 M5 g* ~1 I# E: }* k4 d. ~! C
二. 使用SharedWorker6 E: p6 X6 S7 [# B |5 x0 L
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。8 f9 a3 `# j3 ]7 c; U7 ^
. e% q, Q4 X" ~$ N7 y
// shared-worker.js / g- c& D7 @8 d4 d) G/ Q7 M" wonconnect = function(e) {0 A) X3 c5 e/ S+ ^ {& X5 H7 W# s! z6 n
var port = e.ports[0]; 6 X3 |; w2 a H7 g 7 j8 v& S: u' j3 O" L: W* N port.onmessage = function(e) {# \4 C+ ~* |8 i. h! Q0 g8 J5 a
var message = e.data; 6 K: K5 i9 r" t- W- b& V // 在这里处理接收到的消息 * w: S- ~+ ~) a8 ?) e Y2 q };8 ?/ I2 }3 q; k7 C& {! V
% y o4 @% O* d: n5 k port.start();& m- w ^* _. K& }; k
};, \4 q7 @( T1 s. ~- T0 } B8 s, i
# O# V& k* |, N4 y! c0 U
在多个窗口中分别创建SharedWorker的端口,并发送消息。# ?; H) a$ E0 V) G9 D. `: M6 m+ w# ]
// window1.js& P; i+ v+ J. J" y
var worker = new SharedWorker('shared-worker.js');- g3 Q4 Z& V0 |6 n, r
var port = worker.port; / {9 Q {$ P* f: ? 2 W i, v% h! w/ l$ X7 \' Y" f$ B* ^port.onmessage = function(e) {$ j% m# g% k, o! p; K( o
var message = e.data; , v5 x6 V r9 H- ^( M // 在这里处理接收到的消息 7 l8 @! ?+ y4 R4 q x$ w};- W4 G/ B: q& l u, b2 h
2 i. q) B6 T- |5 g; K4 ^port.postMessage('Hello from window1!'); $ n8 s4 _' W( ?. u4 ~, z. I/ C+ o1 i5 w- `3 j1 P% h! _' L/ [
// window2.js : ?" ]9 s1 }3 t/ \5 `' @var worker = new SharedWorker('shared-worker.js');) t0 f( I3 Y5 q, X# j( t
var port = worker.port;% ~2 X9 p3 y2 h' a' s
7 x2 S- }3 W( v2 y
port.onmessage = function(e) { ' ?9 L. P3 ?. U' L4 G3 {" z var message = e.data;& N! K7 ~% O7 A2 e
// 在这里处理接收到的消息 $ \/ j- r9 ~. A5 R, m' T};) S& {7 v; q# H
! [4 T. l; X4 |% s# z: K
port.postMessage('Hello from window2!');) x7 @# A' p$ N( V$ f9 T+ O
8 I4 u2 ^4 \ z/ o; e在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。! m; U- y5 a3 g' U& w& [
// shared-worker.js% _' n4 z [' A1 V0 ?
onconnect = function(e) { ; ?' s7 F3 J. q' h c! p1 j var port = e.ports[0]; / o5 X- S2 q. l- _4 x : Q+ f! A* ]" |3 Q: \8 E. r/ a/ p port.onmessage = function(e) { ( ~' `& |$ ~$ A* z var message = e.data;! p2 a5 ]4 R( l2 a% H/ ?
// 在这里处理接收到的消息, H. e |9 K( f2 ?
8 D0 W C' }5 [1 X2 R# Q // 向所有连接的窗口发送消息0 j0 k z8 J1 h1 N
e.source.postMessage('Hello from SharedWorker!'); 6 y- i4 x6 X* \' r3 | };4 b( P' p4 o, `6 D6 |' Y, A
. J" U% |7 u, V- \9 M) M
port.start();0 H% Y8 M" p% [9 T1 f' B9 r4 x
};. _9 R5 P# s1 R) ]; k' f
1 w* E$ A8 _7 k7 o+ K( r/ m ( g- ?( U2 P. p- P 1 ]; Q0 T( k. v" H& g