QQ登录

只需要一步,快速开始

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

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

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel0 [3 {3 m$ J! ~* @/ f6 \! j
4 n0 s* l+ z4 j4 u
const sendMsg = new BroadcastChannel('logout_channel')5 m3 Q9 Y; v; s  h
sendMsg.postMessage('清除缓存')
3 V; Z3 b3 S5 o/ I4 o& \9 GonMsg.onmessage = async (event) => {7 F3 x/ t* y$ q
   console.log('event清除缓存', event.data)
8 o/ V  H1 r4 u. k) ~2 J! \& T}& }0 H) O8 _; I  e: s: ?
; G) T  P( G& A
二. 使用SharedWorker
, }* w( Y9 R9 o4 T' W* p! p8 I1.创建一个SharedWorker实例,并在其中编写处理消息的代码。! L0 L& k% X( j/ o- ~; k- p6 f

$ q; B3 Q, O% d1 x// shared-worker.js
# ]5 D: u6 f" u4 ^+ @6 E% r, K( Monconnect = function(e) {5 k: H, K" P- |# f; j( {
  var port = e.ports[0];2 C! r. e" U# c, u) |$ d! I( g
, [" g7 _0 L% O3 s6 m8 r! H  M
  port.onmessage = function(e) {8 g9 ?2 y6 S$ \% j0 s5 Y. ]1 g
    var message = e.data;$ v* V3 N. E0 E3 X. A' @
    // 在这里处理接收到的消息1 Z1 Z$ j8 T+ z5 m: u& T
  };
& _9 Z( B6 S: k
9 t' o! J! I0 ^7 X0 u  port.start();
( U# w4 r! Y+ T  _};
( U1 r, J* v, a1 h' c
/ T( [. g, v$ P; [5 Y在多个窗口中分别创建SharedWorker的端口,并发送消息。
: G. d& A6 V) _& p" D/ d2 S) W// window1.js$ m( Q: |; e8 ^$ @* v. B
var worker = new SharedWorker('shared-worker.js');6 T( z# h6 q( @% M5 j1 N6 e& C1 F
var port = worker.port;) i+ h3 \  c* _
: Q3 R; T8 c) G0 t0 a
port.onmessage = function(e) {9 C3 k& d2 E& j& o( a9 J2 M
  var message = e.data;
# I" y$ W$ E0 P0 t6 c4 l  // 在这里处理接收到的消息$ x8 w7 |3 P# V4 t$ |' N/ Z
};
, a) @+ d9 e8 {  O+ w6 H* r
- [8 o, G. T# x& w5 wport.postMessage('Hello from window1!');2 B* A! S+ ?0 {
! g, A* Z: M1 ?
// window2.js; x, p7 R# `: j- S( ]7 R  t& F7 S
var worker = new SharedWorker('shared-worker.js');
" g3 O/ g& S) ^. i1 ?! _var port = worker.port;
  r! u# D- Q7 F. E, C: Z0 P
9 h0 H. d( w+ ~& q0 f" V2 gport.onmessage = function(e) {
$ E0 N/ P% K/ x7 m/ H  var message = e.data;) I- W3 S6 R9 |5 D  s# S7 }3 }
  // 在这里处理接收到的消息
8 j7 l7 s1 U/ l};
; X( i! f0 J# _4 @$ @
5 O" t& w; m( j: }8 D# uport.postMessage('Hello from window2!');4 M& m9 y& K: ?3 ?4 h

& c* s# [9 n% S1 q6 S$ ?在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
3 Q; ^+ K; E! \1 s// shared-worker.js4 E' b, @  w; L# q, g: L  `
onconnect = function(e) {
  p* d+ Y+ U2 y1 z- y  var port = e.ports[0];, }) {' C8 F) \

2 X3 L) F. h( K1 x9 \  port.onmessage = function(e) {
: L# n$ T+ `0 w/ g/ d% A1 o    var message = e.data;
1 m5 V  d! J2 |' L6 r/ N    // 在这里处理接收到的消息
. b  T0 t+ [' N
! r+ M# p0 z; W1 F    // 向所有连接的窗口发送消息$ O$ p0 O8 d' g7 ]+ Z7 b
    e.source.postMessage('Hello from SharedWorker!');
8 C) t* R6 V+ A1 s  };
6 I! y) T( w. d
' e6 _$ ~' ]( T( i' Q  port.start();
7 ^1 @+ A5 @$ j, e4 Y};/ ]3 i7 e" L3 i: X' W1 _4 W5 p

' D8 X4 }6 _. W* }. c
- X/ S& [8 M9 u% L; V- M
- j* G! ~( b0 J! X0 ], o
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-8-25 19:53 , Processed in 0.320213 second(s), 51 queries .

回顶部