- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel
1 |5 P' [' F, q$ x& w) w* b; w9 @
" T$ z, u* x9 y% v& q3 fconst sendMsg = new BroadcastChannel('logout_channel')# v8 @* p3 S" z' N
sendMsg.postMessage('清除缓存')
: S/ o, l) q6 }7 uonMsg.onmessage = async (event) => {2 f+ M" i3 ]$ V$ ^6 \" K, j- [; \
console.log('event清除缓存', event.data)( W% s, }, A' d; j8 h `* U
}' ~: d i2 d8 R* k4 t6 X8 z d
1 m5 K: B0 H1 C# r
二. 使用SharedWorker0 p. m, J- c' e4 L) K& c$ S7 J
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。2 O# b* }- k+ |
+ w' I7 L- {! ]( ?/ ?6 q// shared-worker.js: Z. o( C. O1 |5 a1 e# Y2 T: G9 t
onconnect = function(e) {
+ f5 s( u0 K- @' B( Q6 e- K% ^8 x5 F1 i var port = e.ports[0];
a& d) o5 {( U: X
7 V! F6 K I; N) F: C5 e; k! } port.onmessage = function(e) {
* g* M) j8 e3 o: b/ c% l) [/ Y var message = e.data;! r9 e. d& w! W2 h" O1 A
// 在这里处理接收到的消息: \9 K% l& ]% s2 J3 ^
};
3 g6 Q& h9 K6 T s& v0 S& I' A
3 D& y! G8 Z- B port.start();
2 K( e0 z9 b. N& O' v};
) H5 K+ _; O+ X
- [! u' Q% b7 z5 h' J, w0 D$ y. ^在多个窗口中分别创建SharedWorker的端口,并发送消息。+ q1 s* o) H8 L V
// window1.js v P% f. v' `; B8 W
var worker = new SharedWorker('shared-worker.js');
% ]# r$ }/ B- ]) Z! jvar port = worker.port;) M1 [1 F% q1 M* h! N! h( x
8 B0 W9 G% s! e3 L- oport.onmessage = function(e) {0 w* q( a" C# D; I; U9 c# s4 r
var message = e.data;
d% l* X( s0 [# s // 在这里处理接收到的消息
/ G9 p$ L: w1 y; N8 G8 {) o4 N* S};8 L0 [; b4 C) q, b2 n' Y
" v2 t8 F$ G; i1 ]port.postMessage('Hello from window1!');
4 _" f5 Q, U! p- P |/ ^$ v/ W' i. I
// window2.js* R* n6 q% H" N5 P! c
var worker = new SharedWorker('shared-worker.js');* B6 o/ t- X9 ]7 a
var port = worker.port;
# J" o. e& o t2 y2 W- X' {- Y) U; O- t3 a! h$ s+ L0 U# a
port.onmessage = function(e) {
, ]4 |0 D/ ^) h/ Q3 J z9 w! ? var message = e.data;0 l3 V2 n, T3 I. k4 b! r$ Z+ K: }
// 在这里处理接收到的消息( ~3 P: ~6 o0 @ j4 V% g5 H
};" s1 k R, E! x! ^# \
; R, M# Z. _6 g( V
port.postMessage('Hello from window2!');
) N- c: f: t5 u, H3 p* i( j- ]) Z& `! Y- B! \
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。( Q- _4 P" J- M( ?
// shared-worker.js3 S! e3 R' {2 @/ d0 ^$ j
onconnect = function(e) {
1 s( P( M" \* q& C8 R, D9 ` var port = e.ports[0];& B7 V2 \6 I5 B1 g) W: X
4 p- z# _5 ~, ]9 O
port.onmessage = function(e) {( }* `5 z% O5 r, G
var message = e.data;5 C2 C) \% x8 _+ E
// 在这里处理接收到的消息1 h2 T, z) @9 z' t) L7 k
( n$ f3 E) b! k5 G8 k
// 向所有连接的窗口发送消息
5 r! X; g: y5 v e6 R4 A" b e.source.postMessage('Hello from SharedWorker!');
' l4 ]$ P% e/ J$ S };( V* K4 N& p" w3 S: y) S; P7 p
8 b6 l) c' U7 Y4 G; Z8 @5 S
port.start();
) K% `9 G( |5 F. _};$ D' U- p1 c3 p- j+ R) u
- C; |7 x; T% F) V7 y& [ o
( q1 W, a; E# {; |- s4 I
% \- T% P; t# @6 P+ e' Z6 N9 k
|
zan
|