QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel6 R" `$ ~7 P4 j% n9 s% m, o

  ?) F& Q* o$ v( I1 `0 D9 R! Dconst sendMsg = new BroadcastChannel('logout_channel')
! J) a  ^; N$ z2 osendMsg.postMessage('清除缓存')
: h) V5 n  I* L4 W0 X8 xonMsg.onmessage = async (event) => {# @! z% P) y4 |2 U! i" h, [9 f
   console.log('event清除缓存', event.data)
) s- z" L0 E! s* b8 l) G- c}
. x; M3 S/ d# m+ t  _9 W% I0 M5 g* ~1 I# E: }* k4 d. ~! C
二. 使用SharedWorker6 E: p6 X6 S7 [# B  |5 x0 L
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。8 f9 a3 `# j3 ]7 c; U7 ^
. e% q, Q4 X" ~$ N7 y
// shared-worker.js
/ g- c& D7 @8 d4 d) G/ Q7 M" wonconnect = function(e) {0 A) X3 c5 e/ S+ ^  {& X5 H7 W# s! z6 n
  var port = e.ports[0];
6 X3 |; w2 a  H7 g
7 j8 v& S: u' j3 O" L: W* N  port.onmessage = function(e) {# \4 C+ ~* |8 i. h! Q0 g8 J5 a
    var message = e.data;
6 K: K5 i9 r" t- W- b& V    // 在这里处理接收到的消息
* w: S- ~+ ~) a8 ?) e  Y2 q  };8 ?/ I2 }3 q; k7 C& {! V

% y  o4 @% O* d: n5 k  port.start();& m- w  ^* _. K& }; k
};, \4 q7 @( T1 s. ~- T0 }  B8 s, i
# O# V& k* |, N4 y! c0 U
在多个窗口中分别创建SharedWorker的端口,并发送消息。# ?; H) a$ E0 V) G9 D. `: M6 m+ w# ]
// window1.js& P; i+ v+ J. J" y
var worker = new SharedWorker('shared-worker.js');- g3 Q4 Z& V0 |6 n, r
var port = worker.port;
/ {9 Q  {$ P* f: ?
2 W  i, v% h! w/ l$ X7 \' Y" f$ B* ^port.onmessage = function(e) {$ j% m# g% k, o! p; K( o
  var message = e.data;
, v5 x6 V  r9 H- ^( M  // 在这里处理接收到的消息
7 l8 @! ?+ y4 R4 q  x$ w};- W4 G/ B: q& l  u, b2 h

2 i. q) B6 T- |5 g; K4 ^port.postMessage('Hello from window1!');
$ n8 s4 _' W( ?. u4 ~, z. I/ C+ o1 i5 w- `3 j1 P% h! _' L/ [
// window2.js
: ?" ]9 s1 }3 t/ \5 `' @var worker = new SharedWorker('shared-worker.js');) t0 f( I3 Y5 q, X# j( t
var port = worker.port;% ~2 X9 p3 y2 h' a' s
7 x2 S- }3 W( v2 y
port.onmessage = function(e) {
' ?9 L. P3 ?. U' L4 G3 {" z  var message = e.data;& N! K7 ~% O7 A2 e
  // 在这里处理接收到的消息
$ \/ j- r9 ~. A5 R, m' T};) S& {7 v; q# H
! [4 T. l; X4 |% s# z: K
port.postMessage('Hello from window2!');) x7 @# A' p$ N( V$ f9 T+ O

8 I4 u2 ^4 \  z/ o; e在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。! m; U- y5 a3 g' U& w& [
// shared-worker.js% _' n4 z  [' A1 V0 ?
onconnect = function(e) {
; ?' s7 F3 J. q' h  c! p1 j  var port = e.ports[0];
/ o5 X- S2 q. l- _4 x
: Q+ f! A* ]" |3 Q: \8 E. r/ a/ p  port.onmessage = function(e) {
( ~' `& |$ ~$ A* z    var message = e.data;! p2 a5 ]4 R( l2 a% H/ ?
    // 在这里处理接收到的消息, H. e  |9 K( f2 ?

8 D0 W  C' }5 [1 X2 R# Q    // 向所有连接的窗口发送消息0 j0 k  z8 J1 h1 N
    e.source.postMessage('Hello from SharedWorker!');
6 y- i4 x6 X* \' r3 |  };4 b( P' p4 o, `6 D6 |' Y, A
. J" U% |7 u, V- \9 M) M
  port.start();0 H% Y8 M" p% [9 T1 f' B9 r4 x
};. _9 R5 P# s1 R) ]; k' f

1 w* E$ A8 _7 k7 o+ K( r/ m
( g- ?( U2 P. p- P
1 ]; Q0 T( k. v" H& g
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-15 05:30 , Processed in 0.290578 second(s), 51 queries .

回顶部