- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel8 [9 o0 O8 }' @* g, V
) I$ P/ t D: g pconst sendMsg = new BroadcastChannel('logout_channel')
9 {& f0 @6 z# k( ^& PsendMsg.postMessage('清除缓存')
6 g9 J7 O7 T6 Q0 U$ xonMsg.onmessage = async (event) => {
6 L' q, V, S: b2 i- j console.log('event清除缓存', event.data)) F4 q$ y# ~$ w1 q. G8 R+ v# D
}* G6 N7 F# q' |2 d- g
" ~0 e% i3 `5 [4 x
二. 使用SharedWorker: d R6 Z5 n# b: i
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。3 Z6 S6 K* Y1 P! f) R
) T: ^6 b. V4 ~3 v1 u# S# W3 F
// shared-worker.js
, G, L* `1 B7 r- W. W/ M Lonconnect = function(e) {7 O4 \$ M" j6 D$ [, G. \: V4 `$ d
var port = e.ports[0];
/ I( D7 \: W: Y- b$ t% _- b% z% v2 A3 {
port.onmessage = function(e) {* T+ G, B( D3 F
var message = e.data;& i6 g, l9 @3 K
// 在这里处理接收到的消息. {7 C9 j: v" I6 T( Z' W
};
' X% F1 U# I6 w2 C
, M( L6 Y* g5 m4 p( L* s port.start();
, d% W! r& K8 K' j};
' M* P& }2 S5 O0 M1 v2 R6 `# I! n9 o, t2 P% x" K# j$ Q
在多个窗口中分别创建SharedWorker的端口,并发送消息。
" {$ ^; y- G, d; q// window1.js
4 `$ h* E% G& S- o" v) l" r' ?var worker = new SharedWorker('shared-worker.js');# [8 D2 d& c1 V6 r4 j! d9 e3 }
var port = worker.port;
) ~9 w! z. `6 A* ?- U8 F+ y6 w
port.onmessage = function(e) {
& H" X4 i: b; N; b; J var message = e.data;
2 C- ~( T: F6 w8 v$ [" M. n0 H // 在这里处理接收到的消息
- C8 P. r" `4 ~5 F" T6 D: a \% r( B};: }" t2 t1 |% ]
- d" z2 ? ?( T, d- vport.postMessage('Hello from window1!');) }: P* v5 Z2 t
- z! v( Q" B& r
// window2.js0 x& ^ i5 c# P. w1 w4 ^4 m k
var worker = new SharedWorker('shared-worker.js');: s x1 u* w! T8 T
var port = worker.port;( N5 H- P( b. U/ b5 d9 I4 J" ]
6 v. P5 }$ Y+ g9 w/ l
port.onmessage = function(e) {0 R: c; N6 \: D
var message = e.data;5 \3 T& w. c; S2 x, l4 _" X7 Y
// 在这里处理接收到的消息0 ~: U8 [2 g/ U3 x
};. i9 {- r1 e, N3 h* A; Z' b) W
/ _, n- ` ?6 ^9 v4 s
port.postMessage('Hello from window2!');3 f& ^, p' w' E0 k6 r4 x* [: ~* V
9 p: w5 s2 t5 h+ j: N! f ]
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。, e0 [/ z1 X2 y4 M) W8 c
// shared-worker.js; z8 j' c) [8 V0 G. r0 U6 [
onconnect = function(e) {
9 D O+ T9 O7 a; i var port = e.ports[0];
- @: I$ T. J2 j6 ^% L8 l' O4 u' J. d/ J: b5 O7 M- {( O- n. H
port.onmessage = function(e) {5 }6 `5 `+ t3 s l* ]9 S; g- Y
var message = e.data;3 H! [4 f6 W4 O, I
// 在这里处理接收到的消息
8 g6 X5 S1 \5 {) H# K# x: h5 i( ^: \
// 向所有连接的窗口发送消息: a$ [/ n& n8 H/ x
e.source.postMessage('Hello from SharedWorker!');
! w8 A( n! y% ?* |/ k };
0 C0 S" `) J' D
% I: I5 h' H0 H# v+ w port.start();
" [, X; t4 V7 Z: k3 z* U: g};4 _; a# N" B) v/ m
5 L$ K" P9 G% ?2 C5 B3 p7 \
; h$ ~/ X) J9 o' z! ]
9 n; U w+ B q( d! V$ j! l( D6 V9 [ |
zan
|