- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel/ F" s/ j8 c! w9 t
' R" [% O# D. v, X5 Iconst sendMsg = new BroadcastChannel('logout_channel')# x9 E; e( l% L1 j& |7 W+ G
sendMsg.postMessage('清除缓存')
/ G) A4 Q) v: ], J% TonMsg.onmessage = async (event) => {' Z" f+ B& \+ N* g: \
console.log('event清除缓存', event.data)
- I: @4 r0 d3 |) f. E, {}
3 Q) f) p3 e5 Y' O8 N( w
1 s6 \7 o* W$ o7 m: ~二. 使用SharedWorker
1 ?( H; M/ _ V) H1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
. G0 j5 j2 D; ?5 v7 s! ?: U( \" G I- d+ I9 M S
// shared-worker.js/ ^" v* p! J# s9 o) a8 }4 H9 B
onconnect = function(e) {
- d% c; J1 J. F% ~& U$ w var port = e.ports[0];
6 G# f1 R5 o6 P* ]6 }, d& ?1 o2 F& G( r; a( i7 ~# ?4 n2 r
port.onmessage = function(e) {% s* h: F- y1 A6 F9 M
var message = e.data;
7 {/ I, c6 P! l! y4 z0 N // 在这里处理接收到的消息
2 }( B! z; A; C. ^/ V8 F };
" C; O. N* A* i D% e1 U9 Q) F
1 a/ j9 s+ k% c! Y" Q. x port.start();
1 ~/ R8 U' J. s6 c" z};
1 G# C1 p* {/ P# y* {1 m3 c! o' ~2 |- P2 I) J% ^7 c3 T5 H
在多个窗口中分别创建SharedWorker的端口,并发送消息。7 E/ ~: k s! V3 O* v) q; |
// window1.js9 V6 t8 F! q9 T' ~6 ?9 y
var worker = new SharedWorker('shared-worker.js');
6 H8 `4 D9 v x7 i8 U [3 Lvar port = worker.port;4 n7 n# U m$ P% I4 o7 y! s
3 G! E* v9 C* L. W' @4 P4 Aport.onmessage = function(e) {- ]" i5 F$ ]! T% Q1 k" m! Y f4 p
var message = e.data;
' t$ }' t, [0 v- Q# B // 在这里处理接收到的消息
/ @2 ^ @1 O0 ^* G};: ^: [; C% h7 O2 D D* |
6 H) h* V( s& ^port.postMessage('Hello from window1!');$ v) n- |4 ^: e6 o, O8 W
2 u7 `: r0 L6 Y/ y// window2.js6 t# h, t) j" z3 T5 u* Y7 ?$ _1 Z
var worker = new SharedWorker('shared-worker.js');" S9 X- d; q! ^4 X: a$ {4 x: N$ R
var port = worker.port;# I2 s0 v- u" |% Q; I# b
* V7 q8 Z, A& ^/ {" R; Qport.onmessage = function(e) {
0 X. D0 Q- v+ u var message = e.data;
0 U1 K! e9 L9 y; F1 v" Z // 在这里处理接收到的消息
, L# Q7 B- s/ }( [# C- O};5 X2 U, ?$ t8 x# w G7 F
' o1 g! }* l( u9 Lport.postMessage('Hello from window2!');
" C! j1 h7 ~$ m% l9 t+ J2 E1 d9 u, a% \# g2 I, j
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
/ D- {' c5 A2 Q* l* R// shared-worker.js
: ?) i4 V9 D: p, {6 M' Uonconnect = function(e) {
1 q4 y! y, g$ s; \+ F8 y var port = e.ports[0];1 Q h$ K7 {2 U( a
0 `3 m5 N. O# G3 ]3 Q; C port.onmessage = function(e) {
6 @& k1 @. n `- U2 r4 d# R var message = e.data;
0 E& j ?+ d0 s9 k // 在这里处理接收到的消息% M4 a4 i9 `2 V" j3 ` ^
7 M& U6 R( @+ B // 向所有连接的窗口发送消息
% L! W& r% E! X+ G+ d e.source.postMessage('Hello from SharedWorker!');% i2 ~/ r+ W; J" U+ x7 k+ ^
};
9 u4 Q0 b! u# V2 ]: M& \
. y- q9 f6 S! @5 k port.start();! [. f& w+ Q% }4 n. @, h
};% ^9 F' ]# W( i _2 L7 p4 e
. M6 {0 Y. h- f% P
4 y) Z9 V0 T! E, |% p8 z7 @# G2 I; ?9 L1 I/ h, y
|
zan
|