- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel
& H: f4 \* K1 ~( Q( _* m9 C% Q1 }. h& s( e8 l* s
const sendMsg = new BroadcastChannel('logout_channel')9 S8 o& {6 C6 N! n6 d
sendMsg.postMessage('清除缓存')6 s- j' R8 p1 B, D
onMsg.onmessage = async (event) => {: q1 ~2 B, Q. O }- ^$ @( ?
console.log('event清除缓存', event.data)% a. \4 T) G6 D1 i4 S+ w- [6 S }/ `
}
9 m% i, A0 e' j% O, v2 R0 B% `
/ O F$ ^9 ~% x9 i二. 使用SharedWorker
7 M. d, u4 v5 T( A+ u2 T1.创建一个SharedWorker实例,并在其中编写处理消息的代码。; g B a; ]0 h+ V# H
& a. j; {) |4 C2 G' E// shared-worker.js
, C8 t" b& `4 g0 |onconnect = function(e) {+ e# E/ t1 a3 A; M9 P; M- F
var port = e.ports[0];+ J2 _* P' m* j5 M8 M8 n
, c/ t% Y7 Z3 I1 L! M8 B. p port.onmessage = function(e) {6 b) H) \, i/ ^ O/ H
var message = e.data; o/ ^' W) b% R/ l- R ~
// 在这里处理接收到的消息; M: v/ o7 R- l$ s6 n; E
};
) k& n5 s) B. ?6 p. K1 ?6 `# X3 y z% U5 [- o; X
port.start();9 x1 t/ E4 m6 C
};$ ? C( q- V6 x5 P. f, ~
. j8 h9 Y; \7 q. h; z. | s, b在多个窗口中分别创建SharedWorker的端口,并发送消息。1 ?/ V' { V8 i
// window1.js, H- ^/ G! f- I7 n
var worker = new SharedWorker('shared-worker.js');2 v; s: q" D" k. |( N
var port = worker.port;
' S" A: B! b. V. C
0 _( I- R, G0 ^7 J4 Hport.onmessage = function(e) {
b- e$ n( w: v/ R var message = e.data;
+ }2 O# S5 @1 t // 在这里处理接收到的消息
& x+ W: O, n4 `' H7 L8 q};
! h4 i: R' B, }2 x/ K( ~, [
, Q$ I3 j! R4 t! Hport.postMessage('Hello from window1!');
0 ^+ K4 q3 j/ `6 }! r# q# z8 a: ^, p2 v) A! A; K
// window2.js+ K$ g1 x( E, F! \7 P
var worker = new SharedWorker('shared-worker.js');
$ ~4 E6 W2 `1 s# ^* H0 p- }var port = worker.port;
3 c7 I: u8 s) t' M
' q% `5 I9 f: S* V1 E5 h! g3 Sport.onmessage = function(e) {
* q& y6 ?/ G" s- b var message = e.data;
1 p; y' x" W3 q" M // 在这里处理接收到的消息; o3 f4 [6 h3 q. j$ I. \* h. f7 l
};; h" | T! F9 x8 N- Z% K8 T" m
3 W6 |* @9 A4 G% _3 D) @% Yport.postMessage('Hello from window2!');$ ?9 T5 k2 L# Y; p. V& |3 g% i1 p
! v2 `8 ?: C7 }5 e* U
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
; x1 h7 H, ^( s7 `// shared-worker.js
8 v7 {, V/ X; ~- [/ H5 conconnect = function(e) {
! U$ u6 o# W) K. q var port = e.ports[0];& X8 d C" b: o; S& H
, ^0 W. W |2 r0 a- g port.onmessage = function(e) {
" A5 j* O4 `' L$ x var message = e.data;
3 C7 k0 V( I( r6 }" |/ g( x0 X5 _ // 在这里处理接收到的消息
" v6 \2 A$ l1 j. r7 ] i% f* H& ]8 j, F& [: Y. R4 l( A
// 向所有连接的窗口发送消息& R# ^6 E0 E+ Z1 o7 }# z
e.source.postMessage('Hello from SharedWorker!');- \ F0 u3 C; F- Q
};
' G4 c2 H9 [4 `: l' y! @# r4 s, e a
port.start();
' A# R- f5 U8 R1 F& x+ j};
5 N0 ^/ y% Z8 t6 M; Q( T
+ R$ I+ O$ P/ i4 Q, m" f. P0 U
) D& p: A \9 I6 O0 i! m3 W; B& |5 {: j0 }/ e
|
zan
|