- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel0 B0 [$ _0 N+ {: Z
! b- S4 U: o7 p9 u% `const sendMsg = new BroadcastChannel('logout_channel')
% b3 P2 `! u9 j0 ksendMsg.postMessage('清除缓存')
7 t/ {1 h8 I0 n9 nonMsg.onmessage = async (event) => {
# C9 x7 t% I' }' y% T* L9 C0 c) k- f. H console.log('event清除缓存', event.data)
+ L! c b v1 N/ V' V' y' W1 K}
2 S7 l' T8 p0 F# q# {, a% T8 E b# W Z) `) D2 T
二. 使用SharedWorker
# k8 o; J9 y% x1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
7 z" y4 G/ L# O# a. ~
' A0 _- W# \' Z) Y$ `// shared-worker.js
4 z3 H( {, u7 M" o. I/ ^ Gonconnect = function(e) {* n* ^$ S- c6 z/ T0 ~ T; Z
var port = e.ports[0];7 H$ S4 B) W( F- b& Z4 y* n9 y$ W
8 Y t. P; u0 n4 H port.onmessage = function(e) {
* C0 Y7 C, O# w. \ var message = e.data;
" g# ^+ j3 g# {9 [) \& H // 在这里处理接收到的消息
; J7 T* r) d3 }& M };
! ~4 @. v( |( Z, i5 r' h4 T4 w
" V* D* R0 |+ R2 l: n; M* F4 u8 g4 C port.start();, U9 x. v9 e1 Y. \- A5 c
};7 r; U* u4 Y2 R. N! M1 A
' C) |. R! J: D
在多个窗口中分别创建SharedWorker的端口,并发送消息。
4 R- j& x2 j+ y2 R0 E// window1.js
3 o* o: Z6 @ n6 q W7 k3 P: D: vvar worker = new SharedWorker('shared-worker.js');/ ^+ h6 V9 y! l' s3 D
var port = worker.port;! a9 M8 U! m; V* w1 n, k
0 W M* ~7 L! d, S( k' D% j
port.onmessage = function(e) {
) O% F b6 C1 {* i$ s3 I var message = e.data;
, W2 w+ W: q4 j+ w( u8 P2 a // 在这里处理接收到的消息
) h: j2 z% A. S& k$ A* H7 l};. j! h) F a" M+ o
+ R: P, f1 d8 m$ t0 w* Z+ i( Iport.postMessage('Hello from window1!');
# E- s' z* Z1 b2 U8 B6 Q6 Z7 _. L% O1 D C6 P8 l1 x
// window2.js7 P; d$ v6 J# `
var worker = new SharedWorker('shared-worker.js');
6 R+ j0 ^$ T y! f; D7 u4 ?- Uvar port = worker.port;6 x+ [/ V6 u( E; J* I. O
, {6 D' v6 ]1 a% w) Vport.onmessage = function(e) {
, v8 t i! A6 u6 V# O: B7 \ var message = e.data;0 m* B2 y" B& |- `& [
// 在这里处理接收到的消息
4 H& p; D. Y* x/ n: h, n" S! E};
# X' c& H1 X1 x+ J" @8 C% r/ e5 w' C. q5 V0 j
port.postMessage('Hello from window2!');
2 p; m" p; K# J" E
; d* v& ]- m, @( ]& {, p$ w& @在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。 N8 d, k$ y; p9 i6 U
// shared-worker.js
# L7 o6 U" n- }$ ronconnect = function(e) {9 D( G# u. R9 l5 z& k" p$ M8 f
var port = e.ports[0];6 k0 x* d, C7 N& d3 o& z9 J
+ r! I- Y' N a' M# Q
port.onmessage = function(e) {
# k) n( \# N( a" B* N$ S. Z var message = e.data;
" ~5 E( s& p4 }3 ^4 _* } // 在这里处理接收到的消息' X |% s$ B& O9 F6 x" G
+ L6 U$ z! d- e9 w3 \ // 向所有连接的窗口发送消息
! t4 Z2 V' V: U3 {6 c e.source.postMessage('Hello from SharedWorker!');
: _/ q2 R* H, r1 f2 n0 x };- q' I' u3 ?7 ~4 |2 }' L
: @3 v3 O, u2 ~. Z9 I! \ K& l
port.start();6 @0 u+ I. M3 K2 {1 E7 J7 m
};
' `( |$ V1 D' v. t2 E" D0 g/ ~2 I1 n; r& z4 }
, M T# m5 y y- H1 o0 K3 Y2 A
4 b2 s$ w- N" P& i# t8 [( @2 Z |
zan
|