- 在线时间
- 463 小时
- 最后登录
- 2025-6-15
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7342 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2781
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1156
- 主题
- 1171
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel
$ l; q, L( Z8 y# l3 H C: Z- I; }7 c' q+ I. ^7 L. e
const sendMsg = new BroadcastChannel('logout_channel')0 f: P" H# U. P& [1 E
sendMsg.postMessage('清除缓存')
+ ]$ m5 m6 o2 n* conMsg.onmessage = async (event) => {$ z# b$ V2 ]) u2 ?. f% I! Y+ y
console.log('event清除缓存', event.data)
' N8 l7 y$ A. k}
9 r# V$ j: c" p1 D$ ]# R5 k' b: P* k* K; P1 w
二. 使用SharedWorker. E+ I3 Q6 `. @) _* l6 U0 K
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。* I+ K1 i' [4 Z) U9 |3 F% A0 ]) r
) S* d( ~, J" V; Q$ L; ^% E0 V" L( h2 c2 v
// shared-worker.js
% p1 U" z7 s. Y$ T- Jonconnect = function(e) {
1 J/ X& M9 J) a var port = e.ports[0];3 `/ U+ p) \6 C h
7 E0 e% }2 W' ?9 ?- E8 g
port.onmessage = function(e) {: k, D2 U3 N$ R# _
var message = e.data;& ]4 M) b, ~. C @
// 在这里处理接收到的消息3 s: Y: }0 e. K( [4 f5 Q
};
- J. } ~! N6 Z1 B! T2 e# w+ D: h8 F, x5 L8 A' o( B
port.start();
0 H. C5 S& i' {; ^# ~};
2 x5 d' @9 O, F7 |# h. R8 e4 @# u7 v m" s, }# C0 ^
在多个窗口中分别创建SharedWorker的端口,并发送消息。
, C% @5 y1 N# B5 C& c% z// window1.js7 p! b- i1 `- I
var worker = new SharedWorker('shared-worker.js');
$ g( j3 q, t0 Z, O8 w/ U9 Ovar port = worker.port;
) r8 ?" l4 k4 |% G$ i; \; y% m# N: }2 P
) y* j* I9 z0 r# d/ j& L- Eport.onmessage = function(e) {- d0 D7 k1 g* B* f
var message = e.data;6 a! \9 K2 k6 {: c1 _. \
// 在这里处理接收到的消息: c, n) m/ `9 j7 b0 o' w
};& G8 C, ?" F4 {$ i
- F, J h. L& N$ m9 B
port.postMessage('Hello from window1!');- ^) w( m- O8 j2 T. J
7 ~4 F8 | C) t$ M4 S) A" G# l7 t
// window2.js) _4 j3 f3 _, a
var worker = new SharedWorker('shared-worker.js');
4 G; B- }7 }% \) v! a7 T1 nvar port = worker.port;
( J# r2 k% h. {! P" b/ P7 S4 B+ y+ l3 b* Y1 i8 q0 f$ q
port.onmessage = function(e) {
' X$ o. M/ h2 M! U! W- O% m var message = e.data;3 C) A: n) s$ p6 O& c# a5 t3 h
// 在这里处理接收到的消息
/ I0 h" l! p5 s! ~' n! E}; U$ T. `5 J* J! I t! ?- n; J9 `
; D3 k! A- a: r$ rport.postMessage('Hello from window2!');
0 q2 E& o# F3 U! V, @ _) p, A2 y
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。/ C" }" S0 {2 n( s+ C
// shared-worker.js' c9 e* j# F% x* u
onconnect = function(e) {
k( I& U6 g- F8 o var port = e.ports[0];
6 ~; w" v) O% }4 V1 |8 {$ ]0 M' m5 I# x. C4 E/ A
port.onmessage = function(e) {. _1 l8 S( b! F- \! V' \ Y# D2 p
var message = e.data;
% ^9 P3 A9 c0 J2 d' p Q" I% L: v // 在这里处理接收到的消息: @ _0 y- _$ E& M/ u# A: B
, M6 j( N! b/ j& q
// 向所有连接的窗口发送消息
' Z; O' W# ^& P2 X e.source.postMessage('Hello from SharedWorker!'); M; I& ?3 E7 ^7 C: H+ W4 _( O+ v
};: t& B, }# Y! [- T7 J
6 p* b8 N- c$ W4 Z' U" l! L
port.start();* S2 w; z0 A' O ^- E
};6 l1 M" h9 L9 R+ X" V' b
6 C! |' B+ W: p5 Z
! E3 w Q4 }2 \' B! z7 {
9 r. g: U4 f! e. d- P# s5 a |
zan
|