- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
一. 使用BroadcastChannel
" @$ |) @: d* s) K/ \% i! {& I2 N! {, L) q8 _5 J
const sendMsg = new BroadcastChannel('logout_channel')0 W5 {8 B, P. V& Z* i# H: }# p P
sendMsg.postMessage('清除缓存')
$ e7 r# J$ Z FonMsg.onmessage = async (event) => {
6 R' q" s+ `: M console.log('event清除缓存', event.data)' u* J8 H+ F4 o/ T
}/ }$ J3 i; D! A. Z
" t% X, z V$ P" |( g
二. 使用SharedWorker
# Q, s- b4 s/ U, u0 Z' j1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
/ y$ S* Z/ m) H$ |4 Q2 V. w, ~2 `% g5 \
// shared-worker.js
7 L# @. V' l8 y9 p6 Y( tonconnect = function(e) {
?0 s5 R: d% U5 O( m var port = e.ports[0];4 E5 V3 i. d. Z; `5 f# n
- v5 ~5 \0 J, K. ?; b/ g b
port.onmessage = function(e) {- B# z3 e8 B: U6 i7 d# b5 r1 e
var message = e.data;
2 L" ~5 @, l/ Z# n. j7 e // 在这里处理接收到的消息
9 V( v ~; E- M };, Q5 y; ]: l- y5 t
6 p9 v, }. ^: Z4 ?
port.start();1 `" @0 L8 G9 x. l9 H I3 g' f
};
) d: C3 Z# J0 C& {
1 n& C. w8 x: S* g2 D% Z0 H# M在多个窗口中分别创建SharedWorker的端口,并发送消息。0 ]+ l/ d/ Y {6 f5 S6 ^+ e$ T
// window1.js
5 M4 P% m+ G9 Z5 Xvar worker = new SharedWorker('shared-worker.js');
0 X8 z+ q4 M! \' P) p: Z: d. Ovar port = worker.port;
5 o: w4 M! }! h, W& } N! V& D3 G5 V4 `
port.onmessage = function(e) {7 N2 z% C/ i7 w$ R* _( F# P
var message = e.data;* v# B2 Q; H+ a" J5 ?7 I
// 在这里处理接收到的消息
( p1 U0 P D3 s# J K/ n# y6 U};
( g. x2 \+ n R5 \+ Q, {! C4 p A ?: a3 W d8 }1 M% U. R* k; o# Y. b
port.postMessage('Hello from window1!');. r2 e) [; O* g9 A; Y( v
7 }: J* m+ Z* X8 O$ J: S, R# p
// window2.js
7 z) n+ b- ]% D# s& ]var worker = new SharedWorker('shared-worker.js');
0 b3 p8 ], r) F, F* ^) D Avar port = worker.port;
' @, ~: e; n% F3 u: v- L# {, q0 C I$ x/ b1 l$ J/ F! c
port.onmessage = function(e) {
6 ^4 I! r1 o) ~ G# M6 U. U1 n var message = e.data;
# ~" F# E3 `) P7 Z; L# t7 w, a // 在这里处理接收到的消息$ e6 B- F" P$ u. p
};1 d$ B2 q1 i0 u1 c) ~
6 t' T9 f* S! Z0 ?% u m
port.postMessage('Hello from window2!');1 Q. d) u9 v! |" u/ f
" B Q$ u8 n+ K/ C* Y B在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。, u* z' ?# U$ B' q
// shared-worker.js) R2 `) v/ E+ |- b
onconnect = function(e) {. w; v Z% \5 C' j
var port = e.ports[0];( C5 i1 @% H) l: ^2 a5 Y7 y$ `, ^- ]
6 n: L. _2 T$ m' Q
port.onmessage = function(e) {7 x$ y) o9 m/ n0 r% H7 Y
var message = e.data;
' c) [5 k. P( @' E7 r* y/ K# v // 在这里处理接收到的消息
4 X1 w6 _4 j1 a5 z
7 ~! l+ y0 A, T$ G9 x: ^ // 向所有连接的窗口发送消息
8 ^: g. l1 [! C9 I9 B5 ] e.source.postMessage('Hello from SharedWorker!');
3 c. X3 y/ u9 Y$ r* H# ?5 e };/ @) D4 L# J# D. R0 k3 q P
8 L k6 U; |% g, F# S) a1 M. n
port.start();
c1 l' C$ N2 s- W0 [7 B};& [9 f* w& h5 h1 r* x
8 a% S2 {5 S$ d* H( a& i' K- c$ A
0 V7 ~& [6 `2 W& F7 L" y/ \1 T% k
|
zan
|