QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel8 [9 o0 O8 }' @* g, V

) I$ P/ t  D: g  pconst sendMsg = new BroadcastChannel('logout_channel')
9 {& f0 @6 z# k( ^& PsendMsg.postMessage('清除缓存')
6 g9 J7 O7 T6 Q0 U$ xonMsg.onmessage = async (event) => {
6 L' q, V, S: b2 i- j   console.log('event清除缓存', event.data)) F4 q$ y# ~$ w1 q. G8 R+ v# D
}* G6 N7 F# q' |2 d- g
" ~0 e% i3 `5 [4 x
二. 使用SharedWorker: d  R6 Z5 n# b: i
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。3 Z6 S6 K* Y1 P! f) R
) T: ^6 b. V4 ~3 v1 u# S# W3 F
// shared-worker.js
, G, L* `1 B7 r- W. W/ M  Lonconnect = function(e) {7 O4 \$ M" j6 D$ [, G. \: V4 `$ d
  var port = e.ports[0];
/ I( D7 \: W: Y- b$ t% _- b% z% v2 A3 {
  port.onmessage = function(e) {* T+ G, B( D3 F
    var message = e.data;& i6 g, l9 @3 K
    // 在这里处理接收到的消息. {7 C9 j: v" I6 T( Z' W
  };
' X% F1 U# I6 w2 C
, M( L6 Y* g5 m4 p( L* s  port.start();
, d% W! r& K8 K' j};
' M* P& }2 S5 O0 M1 v2 R6 `# I! n9 o, t2 P% x" K# j$ Q
在多个窗口中分别创建SharedWorker的端口,并发送消息。
" {$ ^; y- G, d; q// window1.js
4 `$ h* E% G& S- o" v) l" r' ?var worker = new SharedWorker('shared-worker.js');# [8 D2 d& c1 V6 r4 j! d9 e3 }
var port = worker.port;
) ~9 w! z. `6 A* ?- U8 F+ y6 w
port.onmessage = function(e) {
& H" X4 i: b; N; b; J  var message = e.data;
2 C- ~( T: F6 w8 v$ [" M. n0 H  // 在这里处理接收到的消息
- C8 P. r" `4 ~5 F" T6 D: a  \% r( B};: }" t2 t1 |% ]

- d" z2 ?  ?( T, d- vport.postMessage('Hello from window1!');) }: P* v5 Z2 t
- z! v( Q" B& r
// window2.js0 x& ^  i5 c# P. w1 w4 ^4 m  k
var worker = new SharedWorker('shared-worker.js');: s  x1 u* w! T8 T
var port = worker.port;( N5 H- P( b. U/ b5 d9 I4 J" ]
6 v. P5 }$ Y+ g9 w/ l
port.onmessage = function(e) {0 R: c; N6 \: D
  var message = e.data;5 \3 T& w. c; S2 x, l4 _" X7 Y
  // 在这里处理接收到的消息0 ~: U8 [2 g/ U3 x
};. i9 {- r1 e, N3 h* A; Z' b) W
/ _, n- `  ?6 ^9 v4 s
port.postMessage('Hello from window2!');3 f& ^, p' w' E0 k6 r4 x* [: ~* V
9 p: w5 s2 t5 h+ j: N! f  ]
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。, e0 [/ z1 X2 y4 M) W8 c
// shared-worker.js; z8 j' c) [8 V0 G. r0 U6 [
onconnect = function(e) {
9 D  O+ T9 O7 a; i  var port = e.ports[0];
- @: I$ T. J2 j6 ^% L8 l' O4 u' J. d/ J: b5 O7 M- {( O- n. H
  port.onmessage = function(e) {5 }6 `5 `+ t3 s  l* ]9 S; g- Y
    var message = e.data;3 H! [4 f6 W4 O, I
    // 在这里处理接收到的消息
8 g6 X5 S1 \5 {) H# K# x: h5 i( ^: \
    // 向所有连接的窗口发送消息: a$ [/ n& n8 H/ x
    e.source.postMessage('Hello from SharedWorker!');
! w8 A( n! y% ?* |/ k  };
0 C0 S" `) J' D
% I: I5 h' H0 H# v+ w  port.start();
" [, X; t4 V7 Z: k3 z* U: g};4 _; a# N" B) v/ m

5 L$ K" P9 G% ?2 C5 B3 p7 \
; h$ ~/ X) J9 o' z! ]
9 n; U  w+ B  q( d! V$ j! l( D6 V9 [
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-7-29 17:37 , Processed in 0.453591 second(s), 50 queries .

回顶部