- 在线时间
- 481 小时
- 最后登录
- 2026-8-25
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7859 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2946
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1177
- 主题
- 1192
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel
( m- h; j: `* i+ U6 r% E; p( x8 ], d' W' {* A
const sendMsg = new BroadcastChannel('logout_channel')
5 T; n( W+ e3 j$ `9 qsendMsg.postMessage('清除缓存')# T0 B3 I! S# I: `7 s
onMsg.onmessage = async (event) => {7 j1 v" t2 R6 a! v- U; L
console.log('event清除缓存', event.data)
b, L2 r8 R/ C/ ]8 E& Q: F- ~}
0 Q0 k9 q# L: a U1 x* O
9 y" M/ N2 M" \) w8 Y; E* K二. 使用SharedWorker
' U% T$ F P0 ]) ^ h; t7 C1.创建一个SharedWorker实例,并在其中编写处理消息的代码。2 h2 s5 U, g$ u `; F: k
! |. I0 H' N! [# Z, I8 M
// shared-worker.js4 K0 G8 }; v, U# F/ ^8 u
onconnect = function(e) {
, V0 H; S5 [. m* ^" e Z" r/ H var port = e.ports[0];
# g% ]: `8 p* w7 B1 C5 y" Z
, `- x$ J/ U" f5 g9 c port.onmessage = function(e) {" o" N" a# @2 h1 ~- \2 L
var message = e.data;5 R" o( J) k( s& d4 o
// 在这里处理接收到的消息- H( I! F; G: [; b+ J1 n. @) O+ Z
};' [9 d, ~+ | D5 I
: D* ~7 ], N8 Q* B3 H3 f: [
port.start();
; a% [( E! x3 r2 }3 D};
" v4 g2 _) V& @ y' N& b
1 R+ c* S* ^5 N' k在多个窗口中分别创建SharedWorker的端口,并发送消息。4 t. i( k* G1 g% F) }( l
// window1.js
. ]# a# P# l4 ]& Hvar worker = new SharedWorker('shared-worker.js');( O3 N5 u/ ~' P1 O1 F/ V
var port = worker.port;
9 R* G) b, @0 S. E4 J
% g3 H' i1 i; G: f( t9 p- hport.onmessage = function(e) {4 l% b# E7 G$ b
var message = e.data;
( X# C$ z* X1 F @0 C# j // 在这里处理接收到的消息 e& e7 B; c" C! I4 G1 {6 r: J- m
};
. {# I2 b5 c' K; g
0 V# C+ o5 O0 ~( n2 Jport.postMessage('Hello from window1!');3 I$ P4 c; S. M% Y. O7 {
. O1 C3 y. H2 ]( J' B o) W// window2.js
3 D9 l/ _3 f- l( `8 O$ ]var worker = new SharedWorker('shared-worker.js');
: \; f. M/ C6 o# v# L( r J& F6 Svar port = worker.port;& H7 ^; m, n$ q" p3 D$ K4 l
. V$ v' n# i% K
port.onmessage = function(e) {1 u5 Z2 @% V% _! E/ V
var message = e.data;
+ U7 r5 S. o4 o @( W( p; } // 在这里处理接收到的消息
; ^8 |- ]0 Q( m' }) B}; V1 X- P1 ?% \1 m) X( {2 I
' @0 c5 u' r. i: o" l W# m. H$ Lport.postMessage('Hello from window2!');
. Y w9 D7 L6 E2 N5 u% {/ }7 c4 G2 _3 G0 d8 ]6 X
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
3 {1 ~4 v# @1 E4 m2 E O; c// shared-worker.js* H: [% u4 l8 I/ ^5 W# i+ [+ E+ W! C
onconnect = function(e) {6 j9 E/ ~1 T1 x6 D% o8 y
var port = e.ports[0];. R6 Y* b8 `, O; Q
% T- o" [7 x$ f0 k+ y& [
port.onmessage = function(e) {
3 g, n6 A# Y- y1 g5 a$ _) O var message = e.data;
5 N" ]% @- E0 u8 } // 在这里处理接收到的消息( W6 Y8 e/ F( Y& }
# T( k5 w" [. B: ^ // 向所有连接的窗口发送消息 h1 S1 {. L1 J5 X- a" {& j" K9 G
e.source.postMessage('Hello from SharedWorker!');- b+ U9 Y/ m3 i
};
' C9 @6 X. W& n; {+ Q
8 g4 {3 X% O' }# L# e/ A$ V3 | port.start();
( P& u! b1 J% P2 Z3 N};
8 j8 o- A4 ]( ]* ]) q: P% [% D/ Z7 ^
2 [! _, Q& H, H# ]$ \% g% k' k1 Z; ~- }1 a0 P
|
zan
|