QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1769|回复: 0
打印 上一主题 下一主题

js实现浏览器不同页签之间通信

[复制链接]
字体大小: 正常 放大

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用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
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 22:33 , Processed in 0.400671 second(s), 51 queries .

回顶部