一. 使用BroadcastChannel * [) t$ T; J( L ]7 O4 D4 g/ P2 t . B0 `& N! T+ P: xconst sendMsg = new BroadcastChannel('logout_channel')8 p9 f; e* m8 ?
sendMsg.postMessage('清除缓存') 0 p1 k3 G% p6 {$ L, lonMsg.onmessage = async (event) => {$ Y0 _$ I+ U) G- D* k6 y: x
console.log('event清除缓存', event.data) 8 \+ s2 x9 ]5 U6 _8 ]& `* F} 5 Q" Q/ S; f: l/ H. g( l( a4 Z2 y3 d; H. F8 [4 B9 O5 S/ U
二. 使用SharedWorker ; A2 c- @- ^% n1.创建一个SharedWorker实例,并在其中编写处理消息的代码。4 |1 X, U& y1 }& M
+ a4 F! _3 U/ N% b8 z) Y
// shared-worker.js; W7 J, z/ z; l7 G. K* k# n
onconnect = function(e) {- N) D S3 I9 |. _# q q. [, v2 x
var port = e.ports[0];9 p2 u3 q9 H# X) ]
" P+ ?% M0 [5 R8 |2 l/ i
port.onmessage = function(e) {, g; G1 s0 ~# f" s3 q* v. B: K; |- ]
var message = e.data;2 `) b- a$ m" Q8 {) b" G& H$ x
// 在这里处理接收到的消息 4 v+ d. ]1 C& l7 A) D! o+ L% h( s }; , \* E8 l8 l% C. ^% _' Q6 w M
port.start(); 1 O% ]( U. h) K' }5 ^}; ' z$ Q, E6 d! I# k * ~" ?7 d+ _1 t7 E3 m/ w在多个窗口中分别创建SharedWorker的端口,并发送消息。* H& r. F9 }3 _9 x2 {
// window1.js$ l; T1 _) g4 n8 s# a
var worker = new SharedWorker('shared-worker.js'); $ k0 v/ l$ C Zvar port = worker.port; 4 H+ l W9 l1 K/ A8 u6 l* U' o/ } " l) W! Z" g0 I# d# v0 Uport.onmessage = function(e) { $ c2 _) i8 r* a+ ]4 K, s% Q7 r var message = e.data;, B& B3 l3 O9 F l7 D+ _0 c6 e
// 在这里处理接收到的消息1 L7 o5 w3 E. ?; F7 E/ a
};3 v$ i; N' _9 U( e2 _
! M+ a/ `% r/ a4 bport.postMessage('Hello from window1!');( b' I5 d. b. |- E3 \6 D$ U
% J L! S+ A" G W) |
// window2.js/ y% z- @. L( _5 ~
var worker = new SharedWorker('shared-worker.js');* L3 b! |5 k, C( s% a
var port = worker.port;7 i! P" I; x/ [' T( \+ D
" u+ L6 x2 @) n4 l/ |port.onmessage = function(e) {- i% T! _ [+ ]* Q9 k7 o3 v
var message = e.data; 3 P. e" H# ?* e+ \ // 在这里处理接收到的消息 " C# D: i6 ]: N- x8 z. _; r. d}; / v4 E. ^: H' P- S . J1 C% q& s C2 T& ]. ^* \port.postMessage('Hello from window2!');+ M {# o% b/ ~
) p) ~ l( g; D% n$ o
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。 9 e6 C: _+ M; u& S; x// shared-worker.js O* U7 K' K! S6 h8 O$ yonconnect = function(e) {8 ?1 @2 y* I& h9 P. k J0 v' j
var port = e.ports[0];6 x/ P7 a: I7 f/ d: R+ E# X; \
- E7 o- |9 P* p5 k& g/ t7 z port.onmessage = function(e) { , z9 M) N2 ^' i3 E! Z$ i var message = e.data; , y6 I$ s. Z( Q // 在这里处理接收到的消息 # d( W7 B# z# n) l* P * K" B' \3 ?# a // 向所有连接的窗口发送消息 M- E! u4 b Z# ]
e.source.postMessage('Hello from SharedWorker!'); 6 P, N1 b# |4 w, |. b5 I. b }; 6 }* u0 ^1 ~% b/ s+ E: P: C ( U$ j! x8 a4 G0 f( i/ U; J e port.start();, o1 @% U) L/ {. ^* |* r
};' O9 z# s9 b0 }0 z( q+ J
2 d$ @' `0 i( w, M ( _6 L9 ~, k/ R a & H" S& S. }2 A2 v; A1 k