一. 使用BroadcastChannel 7 G2 B: s( Q6 x( C* x- u1 n 6 C! ^9 [# F' `const sendMsg = new BroadcastChannel('logout_channel') # b( g( [# D# C1 m1 qsendMsg.postMessage('清除缓存')% I2 i2 ^/ M u
onMsg.onmessage = async (event) => {+ G7 o( z; _( [$ ^/ ~' a
console.log('event清除缓存', event.data) 7 K+ G5 m) E1 o8 `}+ N: ^/ [) w6 n: k
( y5 y( ~# Z+ F1 e: o二. 使用SharedWorker' }: d; w# P+ f
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。) K5 |" {- k0 E, V2 n+ l- J. j1 g
( p4 R7 V) {$ S+ j& p* O// shared-worker.js * V) j# J; A+ F/ Ronconnect = function(e) {0 w( t5 H! ^$ q: k, o4 P
var port = e.ports[0];! q6 c4 e) S' P, d, j) D& ` O
4 S$ H2 c8 W3 F3 P: F8 C
port.onmessage = function(e) { % f7 o; j% V7 c4 G+ ]" W+ C S3 h' P$ g var message = e.data; 8 \; s0 W7 K7 X1 {0 b // 在这里处理接收到的消息/ D+ E# l7 X+ N+ g8 A" X' l
};" R6 a% P0 f1 F. [! P4 R1 {5 ~& W
( E; U. @( y9 _ c
port.start();% K- J# |8 p* m4 O) |8 N* T2 S
}; # N, j. I6 Y2 ?7 g9 |; `; W0 i 6 c; |0 S1 w9 u3 n+ P- P# r在多个窗口中分别创建SharedWorker的端口,并发送消息。1 V B9 I; y# h3 Z8 e
// window1.js % v. V% i3 l% q! ]4 r+ Tvar worker = new SharedWorker('shared-worker.js');, N% G5 A. C! W7 n- ]
var port = worker.port; 9 ^' q8 o3 `9 l4 b$ z$ g% w0 V9 u* O3 G W7 L& j( E4 b' J
port.onmessage = function(e) {& S& P! N& S! J, ~* N
var message = e.data;) b% t6 n1 U3 e1 m
// 在这里处理接收到的消息8 Y8 p& k$ ~, V" C* F' B
}; : N1 \: L. [% W. c; V( I, [ O! _) x! L" W) X8 _6 [
port.postMessage('Hello from window1!');+ i: w, t% @+ f0 n {9 c* F+ h
# \2 v" \6 u+ v1 b; B// window2.js 4 }& l$ x# z% f+ \$ I! A8 H; `var worker = new SharedWorker('shared-worker.js'); % R- B9 K+ a! u2 G4 ?8 r/ qvar port = worker.port; 2 L7 s. G9 \* T6 T4 s+ t& {" T2 K2 [1 r8 Q {5 Z/ X
port.onmessage = function(e) { - A' c7 O0 D# I' T0 l+ }/ T1 [/ R* K' N var message = e.data; % y* l4 n2 ^8 c3 i" a // 在这里处理接收到的消息8 ]- W& x7 \$ {& M @9 B" E; G' e
}; . q- R$ D+ U; q) H! [. ]! L; Q% H. D0 B. w* L; K
port.postMessage('Hello from window2!'); 0 @- J2 w( Z' {; x0 m( D- A& o6 W! L' C" h& ?
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。, _* X# w2 e' q ~0 g# d; L- F
// shared-worker.js 8 `$ w1 A7 W, U8 u' ^) ronconnect = function(e) { 1 E* u# F+ k+ Z& S var port = e.ports[0]; / e' [% b7 G2 n5 V3 i' R+ o# |1 Z' I. ^. S6 O
port.onmessage = function(e) { / z. j9 X" c$ h3 M$ O8 C1 a var message = e.data; A! d! \9 ~6 {9 k) g8 |
// 在这里处理接收到的消息 T: }0 Z% V. V
& E. t# W& s4 {( E // 向所有连接的窗口发送消息8 w# K f8 O) v
e.source.postMessage('Hello from SharedWorker!'); % j( K' |7 P& V, }$ u7 g };! t6 W/ x$ C. e; R. \& e" ]: z
9 b: F1 k' K# G; O port.start(); ' D. s; n H$ `" K3 L$ ~" z( c0 h7 E};* e' S* A5 w( A5 L$ r6 L
( |( O% a1 R! C
: d4 Q' v+ w q" L |
" v5 g' d& E4 [ n