QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |正序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
% N( |7 o$ h1 W( }; Q* M- N4 m6 }6 X+ |# v. y1 W9 ~7 e
const sendMsg = new BroadcastChannel('logout_channel')
1 {: J: }& j# A' O- G" IsendMsg.postMessage('清除缓存')! ^+ S( A5 ~, q7 N# ^! b
onMsg.onmessage = async (event) => {6 G& x8 i+ m' a8 ]7 r+ ^0 W9 `
   console.log('event清除缓存', event.data)
: L* m! e7 g5 a" \/ i' `}
# K; {4 c9 Y7 r& ]- z4 [: }" A* _) c" J, s; r
二. 使用SharedWorker
0 M: s  R* K7 K. k; Y( d3 Z1.创建一个SharedWorker实例,并在其中编写处理消息的代码。6 V$ S2 `" w, a2 {- M: N

" J' l7 J0 j" K1 E4 k( `, s// shared-worker.js
, b- ~- ~9 }# z) K+ f; j! Ponconnect = function(e) {- V: D5 K! ~( [
  var port = e.ports[0];7 X( ?! c" U% C) c
* |5 j4 s2 M  n  L
  port.onmessage = function(e) {
0 G% J( ~  I9 @5 c    var message = e.data;
4 J9 R( p! _4 F% P  Y/ B2 p    // 在这里处理接收到的消息
$ C6 a1 n; S0 V4 M% T  };
1 m- c1 t  s) g* M! d% w' U# J. x/ X/ ~6 p
  port.start();
% L% O% v* t8 a7 J. X4 S2 v};
" U  q4 N8 M  \& i0 p+ ^: [- P- K! b% r, V- B% |9 L* {" g+ O
在多个窗口中分别创建SharedWorker的端口,并发送消息。1 l( Z! q* `$ \- i* B
// window1.js
- C, t, H2 Z+ k# X& n( Jvar worker = new SharedWorker('shared-worker.js');
1 m) I8 N5 z* h% Rvar port = worker.port;
0 _- B/ T8 q7 k' t  B
9 U" I/ m/ m" T7 X& l, G6 b+ oport.onmessage = function(e) {
9 m5 ^2 G( o& [# n9 t* s0 ], O2 h  var message = e.data;. ~) b. ?* I# K( _
  // 在这里处理接收到的消息
- H/ ^' c% Z( U4 `" q. a};
( s( J, F/ R! P* N7 m! O' R; U8 p5 X4 l) `' h  b# W
port.postMessage('Hello from window1!');
4 A% z# L. I+ ^( `0 l7 w/ G! [* \: t4 y( c2 A  I: v- Z+ Y
// window2.js
3 Z0 M" v0 u5 H# E. W$ x/ A$ l' v0 Zvar worker = new SharedWorker('shared-worker.js');2 b$ u+ G# ]! y: |
var port = worker.port;9 l  w) w7 w' H1 o/ Q0 Z

5 o8 U# _  z, F, t, v& Kport.onmessage = function(e) {
6 ?  b) w$ N. W; x  var message = e.data;
5 H& I4 j) O8 s! M7 b7 l2 D  // 在这里处理接收到的消息
/ Y4 n! W. n/ @8 B# v% P};' ^7 g& z5 ~$ A  O- |7 r+ f
. K6 p. D" v: m2 i0 E# B  Q
port.postMessage('Hello from window2!');0 t: x( v% V, c# s2 t# F& c
$ H& g) b0 ?9 u2 H/ M
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
7 }1 ^( \& N" d& F// shared-worker.js; ?) h1 O7 Y. u7 F' L0 Q
onconnect = function(e) {3 P* I0 l+ ?2 U& T8 C2 K* B3 Y+ v
  var port = e.ports[0];
% i8 w* Y  y; T2 b! @/ f! y5 M7 m0 e1 i: ^' b' a
  port.onmessage = function(e) {5 ^$ B6 L* ?5 j
    var message = e.data;
) y, L4 I8 b6 P& O. o' j1 f+ Y    // 在这里处理接收到的消息
$ {+ g! o3 c' b/ r7 x! C$ @0 _$ ~$ g1 ^8 L
    // 向所有连接的窗口发送消息* }! r: |$ j2 V' e% I8 F
    e.source.postMessage('Hello from SharedWorker!');% j! n' _  F6 l/ Q
  };
: Z3 }0 C  |) k' p( l
" n, o* U- a' Q6 r  port.start();
" Y) G7 B' L' o% I/ c1 E};, b$ v& Z4 f9 W: b$ t/ c  T

; q: ^, S# w0 {- ]: M
# {: N1 |& Q5 `' k& R3 o
' o  J, X& k$ h3 H+ u# u
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 14:35 , Processed in 0.412794 second(s), 51 queries .

回顶部