- 在线时间
- 463 小时
- 最后登录
- 2025-6-15
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7342 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2781
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1156
- 主题
- 1171
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel
0 r! C; c w0 p: @3 a$ c# C# V/ d: B) j7 r) Q# x$ T& ^
const sendMsg = new BroadcastChannel('logout_channel')0 H+ T& N: x6 k3 z r- b( y* T
sendMsg.postMessage('清除缓存')% w( F; @ L1 t, D
onMsg.onmessage = async (event) => {
# G- L: C' m; {$ _ console.log('event清除缓存', event.data)9 {" }3 ?# P- [1 `8 I
}
; s" R1 ?$ q2 ]; B, G+ e3 W; g% Y: J$ g! c9 D
二. 使用SharedWorker
, z4 S" A+ l* x+ e5 o5 |1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
. o3 W- L0 H, C! D' e: o! `( g; A' l9 ?$ C, v8 [! j5 d* D7 Z
// shared-worker.js9 P- A' n4 h2 L$ a
onconnect = function(e) {; m% @2 L, ^( y8 o! @) }" [ E) q \
var port = e.ports[0];
6 }+ k* P, ~+ [1 {. ?
; m# z5 |. a- n5 W2 H; T port.onmessage = function(e) {$ L2 U. M8 @% d7 k% \ B
var message = e.data;
& X* R1 t% L* T" v6 I // 在这里处理接收到的消息
( x' Z) Y, V( N6 r6 L/ M };
1 p$ j$ q: _) Q
8 f. \5 z2 Z% N; V" ^8 L port.start();" c( f% X; r& I% S, |
};
5 I5 V" Z* _/ H0 g6 t3 ]
9 H9 _$ ~1 u; S% E: |5 I) h# n在多个窗口中分别创建SharedWorker的端口,并发送消息。2 S% d4 u& u+ Z3 D9 S6 }
// window1.js
* [& n/ ~* C6 c- v4 f+ ~var worker = new SharedWorker('shared-worker.js');2 U5 n3 O9 @9 w# k+ w2 h
var port = worker.port;
6 u* i- I6 I$ Z" E; }2 J: z# A& f, ^. p4 l% H, Z7 R
port.onmessage = function(e) {
9 d" J8 b/ E8 q' l var message = e.data;2 T3 b& M W/ O g1 R
// 在这里处理接收到的消息
1 v. f6 u/ {/ H. N; z) S/ ]};
. r6 P! g1 \( H& t& S
' Q( O8 s* E! v5 mport.postMessage('Hello from window1!');
1 i3 v$ F/ X% D& d
+ C: |9 H! p: q; g. _. p6 O// window2.js- F! t: ?( o7 i- j& H0 L
var worker = new SharedWorker('shared-worker.js');2 N5 J3 V. {, V* P9 U! [3 W
var port = worker.port;$ R5 Q0 y9 r! w, n8 Z
% Z6 W$ o4 y! L8 X9 G% P
port.onmessage = function(e) {; {: ^# Q( C, |6 q6 j. z3 y3 q
var message = e.data;3 `# \* O* J1 z, I4 _. G
// 在这里处理接收到的消息! ^4 E, ^" P8 O/ ^8 ]* p4 s% E9 S
};
" M% A" Q; _% W/ `. h/ h, i& J8 `% Y2 F' m# C5 Y( ~9 }
port.postMessage('Hello from window2!');
/ U: W& G* w/ o& L: h7 w% Q7 ^9 L$ C* d
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。6 K$ E3 H* M% y3 B6 @1 I
// shared-worker.js
5 K6 K4 T/ G" S" `% `9 Qonconnect = function(e) {
, v7 _5 u0 r _" x& b' Z var port = e.ports[0];
$ K. F1 [+ {: m l3 R
1 ^5 I) G4 f5 B- S; p1 v) | port.onmessage = function(e) {
( s U$ V( t2 X! S4 J" v/ R3 I var message = e.data;, z/ b9 }" e; `+ W
// 在这里处理接收到的消息+ F8 ^0 O1 l: _) t2 D
3 A: r" X& U4 ~! b2 c& H4 J
// 向所有连接的窗口发送消息8 c# x/ r1 r; Y2 y q. L ?
e.source.postMessage('Hello from SharedWorker!');1 h; F- e: Y7 F; w; @% x8 W* S
};
4 I- J* V3 {8 X7 O! |2 @% g$ {# Y4 q8 H, D6 e8 f
port.start();
: z) i7 p4 d. {1 z, |- A% R% Z V};! x+ H; Z7 x% M! l' j* _+ g+ e* U
2 O) @9 U: P% D& j9 N- B; e
- j3 ]/ _3 c$ M; G
. X" S. }+ c) j6 s |
zan
|