QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
+ g: v% p& }4 y. s$ r( p, `1 E+ L6 U
const sendMsg = new BroadcastChannel('logout_channel'); ^2 s) ~1 M. V4 O, N
sendMsg.postMessage('清除缓存')
- ]: T* Y  ^. s, W3 o9 QonMsg.onmessage = async (event) => {1 g3 G1 b! U6 E" n+ B
   console.log('event清除缓存', event.data)
. F2 I+ I% i. E}. ]& w/ w3 n0 ]

; {3 G3 z; H* ^1 w6 P" g- p8 O+ o二. 使用SharedWorker* M6 K" ]  b' u. c+ k- W
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。0 C' I, _9 x2 v/ I+ o: z* k

; F6 J- _. L; ^) }6 Z" ~// shared-worker.js
- b' a- `+ m2 J4 ^& L1 D) [onconnect = function(e) {3 r* j0 H2 h" t7 ^  |, b3 i
  var port = e.ports[0];. }  A5 m4 l6 S0 j5 Y1 E* s

  Z9 j) D- L, l1 m  port.onmessage = function(e) {9 P8 ]8 M* O# s' b; ?
    var message = e.data;1 q$ j1 d  K' m* }0 W7 O
    // 在这里处理接收到的消息. {9 h- y6 S4 z5 v6 [/ N* D
  };
2 h6 Y0 ^, r0 {: X! D& f2 ?# q2 L( p2 n
  port.start();% ^5 \; W& D6 n
};. _8 Y8 g2 A- U+ P" z" \5 R8 j
3 Y/ H) b6 A1 A/ W$ O6 @
在多个窗口中分别创建SharedWorker的端口,并发送消息。1 Q2 S0 |- D, k: _, ?
// window1.js3 y# U+ A8 T4 B6 ^
var worker = new SharedWorker('shared-worker.js');2 T/ K+ s+ A2 X5 [' c# o  b0 V
var port = worker.port;
3 S+ `. h4 t2 q
' T$ y3 D$ o) e/ F: i- Wport.onmessage = function(e) {
$ t7 G; R% k0 s0 |+ L9 X  var message = e.data;
% d4 i5 t. h  F( z! M- e" l  // 在这里处理接收到的消息
; ]" l7 c3 O- ^# M  w};
' c1 C! u6 Q! i( \) X
( v) u! C% i  ]6 @* @8 Mport.postMessage('Hello from window1!');
4 k; L% t. o+ O: m7 ^, A9 w# ]
% P/ W# ]2 z/ u, d% N7 b! ^6 Z// window2.js
2 s+ \6 e# R. i5 l# Uvar worker = new SharedWorker('shared-worker.js');
3 _+ X+ p+ N/ [var port = worker.port;
; ?# d# d5 `' y. ?
5 p- \  k$ O4 n1 {port.onmessage = function(e) {9 W$ O& ^( B' o" Z* e
  var message = e.data;
& V* o/ U4 P( O; u2 ^9 `  // 在这里处理接收到的消息
, I* r; y9 S3 N/ s};
6 Q' G& |% \* T# p! E6 I8 P  w2 u7 U: M8 z* s& u; [5 E
port.postMessage('Hello from window2!');% a% s5 c4 \+ N
) Y7 t" u6 _$ ^3 i8 L
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
6 P6 H) K% G; I// shared-worker.js' x4 M- ?& j) `' L
onconnect = function(e) {
7 o* f) Q9 y: o/ c3 `  var port = e.ports[0];  F/ z6 `5 s) `6 p
- Q& `: l. ~( S1 d! G% D
  port.onmessage = function(e) {
/ y2 l4 {8 j; ]* _+ [    var message = e.data;
9 I2 D+ Z9 ^: h' _    // 在这里处理接收到的消息5 C% s$ Q: P, R. _
  X, |  w/ T% Z
    // 向所有连接的窗口发送消息( l8 U7 @& O/ u
    e.source.postMessage('Hello from SharedWorker!');  E6 p  c* s3 f! ^+ _& f' w# v
  };2 |9 n4 ^! i2 F; N8 Q* p/ ?
* Q. A' k1 V0 C
  port.start();
9 Q0 S# J1 ~+ Q};
% ^) b/ d) Y* F2 ^2 l: ?8 ^9 v% ^! \& u, v& P% n
$ Q8 J9 y- a( X8 V/ g  W
8 s3 B; s, D8 g) u, P1 x& b: S7 k
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-11 02:06 , Processed in 0.890043 second(s), 51 queries .

回顶部