- 在线时间
- 479 小时
- 最后登录
- 2026-4-17
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7790 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2923
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel8 z; @; O% s+ o9 L( W b; C
: v- L: D8 b0 Y7 w+ l9 W w
const sendMsg = new BroadcastChannel('logout_channel')' I. I9 t1 j; {1 m3 I* Y- X( U/ ]2 n
sendMsg.postMessage('清除缓存')
{6 [& k/ o$ S" O3 ` f7 A8 \onMsg.onmessage = async (event) => {
$ ^$ T; o) S& z4 ]* g# n console.log('event清除缓存', event.data)
( @* }' [; p- f# h- }+ G}
! N0 a4 g5 f- b! |. S3 b3 U
# c7 B; d( W9 P+ j, l5 m* o二. 使用SharedWorker$ c: Y& v* x2 h' M; \7 @( @ U4 B
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。# |# U1 y' X; d) w$ M7 k
' Z( a8 n2 e: f, N; r* S- J- G! h
// shared-worker.js
; k5 f7 ]$ ~5 e) ^onconnect = function(e) {
# [% X6 m c- I4 E/ J: f* E var port = e.ports[0];
3 S' C! W, J+ e
# e/ P, a, M5 V- k" \9 s port.onmessage = function(e) {0 [1 D# c) t3 z) q2 J5 r) L1 n$ U
var message = e.data;. R+ T2 R, a1 y4 i8 D
// 在这里处理接收到的消息
# t! l% Z, J. k+ S8 l+ g9 p5 w };; K2 d: d( d( @% Y
; }( ~- C, y& h- `+ H" l- _ port.start();
2 i9 l: n5 c% j5 @: {, Y};
) |" d' V0 `1 W% n9 ?) c& E. [/ y( n9 b2 }6 y& V; g% E
在多个窗口中分别创建SharedWorker的端口,并发送消息。/ C2 ]: p- N& D: n. _
// window1.js
2 L* F* R* k; d; j# J) f' q8 B7 Bvar worker = new SharedWorker('shared-worker.js');
* L' v8 E, d8 ovar port = worker.port;
. l# ]2 [( U2 R. U0 I9 U: h& ^$ Q$ D" y( y2 R, E1 N3 O- ]( [2 G! e
port.onmessage = function(e) {
& C5 L, t6 p* i var message = e.data;% M, l7 q* Y! c. `
// 在这里处理接收到的消息
- F) A$ E0 Q" G! e' @0 o2 q};
6 M6 ~. p! D- S9 T6 D3 o- U( [ W; A$ a, U2 b: \& t
port.postMessage('Hello from window1!');
' c# t$ F( G9 w- A+ Y2 S6 \. j G
// window2.js3 D- a3 M4 g) C: I) w
var worker = new SharedWorker('shared-worker.js');$ G) d+ ~, k) L7 q
var port = worker.port;
) Y. i6 i, J/ w! N9 \1 e/ w0 y' D. c* X
port.onmessage = function(e) {
3 }5 ]' w! P3 M4 ^, ] var message = e.data;/ ?' `0 k- c' ?; h5 P$ D
// 在这里处理接收到的消息
" G. W, `" S' J8 w};/ [- \% l# B; W
c: Q4 j( T, P2 b; g3 m' E
port.postMessage('Hello from window2!');
8 z3 x8 p6 g& m8 F' G$ K0 T" u# {5 j
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
( d; W' o! H3 p9 o// shared-worker.js4 w. |2 x2 t1 g& `* A8 d: q
onconnect = function(e) {
- N0 G' s& ]6 U. F7 I var port = e.ports[0];
% _# d0 L( g$ v2 Y9 @
$ a6 m: p5 Y+ ~& h( R8 g3 F" Y port.onmessage = function(e) {5 ^( J) J, f% x: o2 a+ n5 w$ v
var message = e.data;
. j) o/ h! h# b // 在这里处理接收到的消息. @, I. e9 Y* }6 l9 U G+ o+ k; I
2 R/ G1 X# j- }( z2 x // 向所有连接的窗口发送消息
\* X% [. D5 \4 \; Q; Z e.source.postMessage('Hello from SharedWorker!');8 k. X; i+ `1 H8 e
};$ \ k/ I* |& j8 K' M$ }9 y
* x: t: l, ^: [/ j0 t# g f port.start();
8 Y) X; d7 o; H* s, S* V};
8 r, C) W6 s6 ^+ N8 v7 ?6 G% z
4 W( ~( C6 P8 m- B- X* P& g' q
, W( w% ?' I5 @+ K* o, |
+ j( _/ m, h8 r |
zan
|