QQ登录

只需要一步,快速开始

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

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

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
$ l; q, L( Z8 y# l3 H  C: Z- I; }7 c' q+ I. ^7 L. e
const sendMsg = new BroadcastChannel('logout_channel')0 f: P" H# U. P& [1 E
sendMsg.postMessage('清除缓存')
+ ]$ m5 m6 o2 n* conMsg.onmessage = async (event) => {$ z# b$ V2 ]) u2 ?. f% I! Y+ y
   console.log('event清除缓存', event.data)
' N8 l7 y$ A. k}
9 r# V$ j: c" p1 D$ ]# R5 k' b: P* k* K; P1 w
二. 使用SharedWorker. E+ I3 Q6 `. @) _* l6 U0 K
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。* I+ K1 i' [4 Z) U9 |3 F% A0 ]) r
) S* d( ~, J" V; Q$ L; ^% E0 V" L( h2 c2 v
// shared-worker.js
% p1 U" z7 s. Y$ T- Jonconnect = function(e) {
1 J/ X& M9 J) a  var port = e.ports[0];3 `/ U+ p) \6 C  h
7 E0 e% }2 W' ?9 ?- E8 g
  port.onmessage = function(e) {: k, D2 U3 N$ R# _
    var message = e.data;& ]4 M) b, ~. C  @
    // 在这里处理接收到的消息3 s: Y: }0 e. K( [4 f5 Q
  };
- J. }  ~! N6 Z1 B! T2 e# w+ D: h8 F, x5 L8 A' o( B
  port.start();
0 H. C5 S& i' {; ^# ~};
2 x5 d' @9 O, F7 |# h. R8 e4 @# u7 v  m" s, }# C0 ^
在多个窗口中分别创建SharedWorker的端口,并发送消息。
, C% @5 y1 N# B5 C& c% z// window1.js7 p! b- i1 `- I
var worker = new SharedWorker('shared-worker.js');
$ g( j3 q, t0 Z, O8 w/ U9 Ovar port = worker.port;
) r8 ?" l4 k4 |% G$ i; \; y% m# N: }2 P
) y* j* I9 z0 r# d/ j& L- Eport.onmessage = function(e) {- d0 D7 k1 g* B* f
  var message = e.data;6 a! \9 K2 k6 {: c1 _. \
  // 在这里处理接收到的消息: c, n) m/ `9 j7 b0 o' w
};& G8 C, ?" F4 {$ i
- F, J  h. L& N$ m9 B
port.postMessage('Hello from window1!');- ^) w( m- O8 j2 T. J
7 ~4 F8 |  C) t$ M4 S) A" G# l7 t
// window2.js) _4 j3 f3 _, a
var worker = new SharedWorker('shared-worker.js');
4 G; B- }7 }% \) v! a7 T1 nvar port = worker.port;
( J# r2 k% h. {! P" b/ P7 S4 B+ y+ l3 b* Y1 i8 q0 f$ q
port.onmessage = function(e) {
' X$ o. M/ h2 M! U! W- O% m  var message = e.data;3 C) A: n) s$ p6 O& c# a5 t3 h
  // 在这里处理接收到的消息
/ I0 h" l! p5 s! ~' n! E};  U$ T. `5 J* J! I  t! ?- n; J9 `

; D3 k! A- a: r$ rport.postMessage('Hello from window2!');
0 q2 E& o# F3 U! V, @  _) p, A2 y
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。/ C" }" S0 {2 n( s+ C
// shared-worker.js' c9 e* j# F% x* u
onconnect = function(e) {
  k( I& U6 g- F8 o  var port = e.ports[0];
6 ~; w" v) O% }4 V1 |8 {$ ]0 M' m5 I# x. C4 E/ A
  port.onmessage = function(e) {. _1 l8 S( b! F- \! V' \  Y# D2 p
    var message = e.data;
% ^9 P3 A9 c0 J2 d' p  Q" I% L: v    // 在这里处理接收到的消息: @  _0 y- _$ E& M/ u# A: B
, M6 j( N! b/ j& q
    // 向所有连接的窗口发送消息
' Z; O' W# ^& P2 X    e.source.postMessage('Hello from SharedWorker!');  M; I& ?3 E7 ^7 C: H+ W4 _( O+ v
  };: t& B, }# Y! [- T7 J
6 p* b8 N- c$ W4 Z' U" l! L
  port.start();* S2 w; z0 A' O  ^- E
};6 l1 M" h9 L9 R+ X" V' b
6 C! |' B+ W: p5 Z

! E3 w  Q4 }2 \' B! z7 {
9 r. g: U4 f! e. d- P# s5 a
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, 2025-6-24 12:17 , Processed in 0.382123 second(s), 50 queries .

回顶部