QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |正序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel; V8 O5 X& C+ H, N7 m& R! l) ?0 N

( \+ b8 J2 N4 Mconst sendMsg = new BroadcastChannel('logout_channel')
$ H( L/ f8 R& i4 J/ I, Z6 e& YsendMsg.postMessage('清除缓存')( z9 b' k6 B0 {7 ^! x$ m6 R
onMsg.onmessage = async (event) => {7 v, N/ p: [, f0 ^3 J7 J
   console.log('event清除缓存', event.data)) x5 n5 A& L+ P" z
}5 _* `2 V7 I9 V' k; X6 f
" i7 K7 M( H( Z5 k/ [: }2 H( `
二. 使用SharedWorker
6 V5 B- Q) g) d0 o" o1.创建一个SharedWorker实例,并在其中编写处理消息的代码。- _" L* K/ B; i0 Y" o' H
& ?/ n, ~/ `+ ~) V+ F
// shared-worker.js& }5 b9 C7 B& C0 O3 V
onconnect = function(e) {2 f+ h7 D- c, c9 y" G$ C- }
  var port = e.ports[0];$ H% e; {$ z7 v) r2 u8 w. {) f
* n$ @# y) \: k; r, |$ s
  port.onmessage = function(e) {) H" u: r* s/ m( q4 G+ d5 W
    var message = e.data;
: o6 w2 ^8 Q3 B/ q, F, o" m    // 在这里处理接收到的消息8 m, o+ v4 [. d- F
  };
: F( o% u- G( F: U$ v3 p' Q0 M" j8 I2 g# ~
  port.start();
  H7 f0 E6 @7 f- y4 p$ }};
' B) Y8 w2 _- ^# L  j  \% ?1 h! k! v! D: w1 j8 A* }
在多个窗口中分别创建SharedWorker的端口,并发送消息。
) P0 V0 Y1 ~2 W' u: n* `; ^// window1.js1 \; O8 m, M0 r8 ~) U
var worker = new SharedWorker('shared-worker.js');5 Z8 y& I$ G3 T" U  m
var port = worker.port;
& I' H( A& T: _) E5 |. Z8 H8 \6 h3 v- R$ J/ g+ ]
port.onmessage = function(e) {
( i: c) r  t* Y$ X  B0 |) r: H' |* c  var message = e.data;
$ q3 s0 a8 y) I4 @4 ~  h  // 在这里处理接收到的消息
; j2 {) J  Q, ^( U- w};
4 l2 j* x8 ^% Q  F7 e3 R) {, Z1 P. m' k
port.postMessage('Hello from window1!');  K6 m. ]3 [5 v: r

1 A1 I0 A9 n6 N- e4 w// window2.js* W% e( i& Y4 l, T
var worker = new SharedWorker('shared-worker.js');4 N. O' I+ J) C% @. \: P3 W
var port = worker.port;
* S. x6 D, ]5 L/ n/ a  Q) p  R& c6 _( r- W
port.onmessage = function(e) {
% f; F$ K9 T4 X! h% z# \  var message = e.data;
: \  v; N7 Y! T2 t: R2 ?0 p  // 在这里处理接收到的消息9 |" v4 s$ I  M* ~
};
- q+ [* W% V, Q" G+ }/ l# _0 ]1 V# `0 x6 f- a2 Y5 D# j' j
port.postMessage('Hello from window2!');
2 g/ U5 f' m3 _6 G6 B' c. E& @
3 L0 ?* E0 I; v* n8 S在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
; e7 q7 q5 I6 E// shared-worker.js( `+ E2 M& V$ n* [9 y: ^5 z
onconnect = function(e) {
( [2 m0 N) c% O$ H( Z  var port = e.ports[0];& H0 n: k1 j" A( {2 v' U5 m0 n2 W
+ L4 w6 p! {8 L, o
  port.onmessage = function(e) {
2 f: T' w/ |# R& p/ c    var message = e.data;
+ |3 e8 M8 N. N7 E    // 在这里处理接收到的消息
% S0 m/ W6 a6 w# s9 p7 T  s) L, g: b4 G' Z9 X* D# u" _: J
    // 向所有连接的窗口发送消息' t. Y" F7 f7 t+ h
    e.source.postMessage('Hello from SharedWorker!');
/ a; ^3 T; D  g! |& [  };  ^4 }  v9 l; i
+ w  ?" s1 d5 Z1 w- ?
  port.start();( z, |4 {, w- c/ |
};
* _5 A( ~+ ]+ }' ]* Y" s# V' I" }, j& \6 U6 j4 x
3 Y7 U2 D0 Z+ V4 t+ X2 p. L
1 C8 o' j2 Y: `; L7 J
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-6-12 10:15 , Processed in 0.372880 second(s), 51 queries .

回顶部