QQ登录

只需要一步,快速开始

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

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

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
( m- h; j: `* i+ U6 r% E; p( x8 ], d' W' {* A
const sendMsg = new BroadcastChannel('logout_channel')
5 T; n( W+ e3 j$ `9 qsendMsg.postMessage('清除缓存')# T0 B3 I! S# I: `7 s
onMsg.onmessage = async (event) => {7 j1 v" t2 R6 a! v- U; L
   console.log('event清除缓存', event.data)
  b, L2 r8 R/ C/ ]8 E& Q: F- ~}
0 Q0 k9 q# L: a  U1 x* O
9 y" M/ N2 M" \) w8 Y; E* K二. 使用SharedWorker
' U% T$ F  P0 ]) ^  h; t7 C1.创建一个SharedWorker实例,并在其中编写处理消息的代码。2 h2 s5 U, g$ u  `; F: k
! |. I0 H' N! [# Z, I8 M
// shared-worker.js4 K0 G8 }; v, U# F/ ^8 u
onconnect = function(e) {
, V0 H; S5 [. m* ^" e  Z" r/ H  var port = e.ports[0];
# g% ]: `8 p* w7 B1 C5 y" Z
, `- x$ J/ U" f5 g9 c  port.onmessage = function(e) {" o" N" a# @2 h1 ~- \2 L
    var message = e.data;5 R" o( J) k( s& d4 o
    // 在这里处理接收到的消息- H( I! F; G: [; b+ J1 n. @) O+ Z
  };' [9 d, ~+ |  D5 I
: D* ~7 ], N8 Q* B3 H3 f: [
  port.start();
; a% [( E! x3 r2 }3 D};
" v4 g2 _) V& @  y' N& b
1 R+ c* S* ^5 N' k在多个窗口中分别创建SharedWorker的端口,并发送消息。4 t. i( k* G1 g% F) }( l
// window1.js
. ]# a# P# l4 ]& Hvar worker = new SharedWorker('shared-worker.js');( O3 N5 u/ ~' P1 O1 F/ V
var port = worker.port;
9 R* G) b, @0 S. E4 J
% g3 H' i1 i; G: f( t9 p- hport.onmessage = function(e) {4 l% b# E7 G$ b
  var message = e.data;
( X# C$ z* X1 F  @0 C# j  // 在这里处理接收到的消息  e& e7 B; c" C! I4 G1 {6 r: J- m
};
. {# I2 b5 c' K; g
0 V# C+ o5 O0 ~( n2 Jport.postMessage('Hello from window1!');3 I$ P4 c; S. M% Y. O7 {

. O1 C3 y. H2 ]( J' B  o) W// window2.js
3 D9 l/ _3 f- l( `8 O$ ]var worker = new SharedWorker('shared-worker.js');
: \; f. M/ C6 o# v# L( r  J& F6 Svar port = worker.port;& H7 ^; m, n$ q" p3 D$ K4 l
. V$ v' n# i% K
port.onmessage = function(e) {1 u5 Z2 @% V% _! E/ V
  var message = e.data;
+ U7 r5 S. o4 o  @( W( p; }  // 在这里处理接收到的消息
; ^8 |- ]0 Q( m' }) B};  V1 X- P1 ?% \1 m) X( {2 I

' @0 c5 u' r. i: o" l  W# m. H$ Lport.postMessage('Hello from window2!');
. Y  w9 D7 L6 E2 N5 u% {/ }7 c4 G2 _3 G0 d8 ]6 X
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
3 {1 ~4 v# @1 E4 m2 E  O; c// shared-worker.js* H: [% u4 l8 I/ ^5 W# i+ [+ E+ W! C
onconnect = function(e) {6 j9 E/ ~1 T1 x6 D% o8 y
  var port = e.ports[0];. R6 Y* b8 `, O; Q
% T- o" [7 x$ f0 k+ y& [
  port.onmessage = function(e) {
3 g, n6 A# Y- y1 g5 a$ _) O    var message = e.data;
5 N" ]% @- E0 u8 }    // 在这里处理接收到的消息( W6 Y8 e/ F( Y& }

# T( k5 w" [. B: ^    // 向所有连接的窗口发送消息  h1 S1 {. L1 J5 X- a" {& j" K9 G
    e.source.postMessage('Hello from SharedWorker!');- b+ U9 Y/ m3 i
  };
' C9 @6 X. W& n; {+ Q
8 g4 {3 X% O' }# L# e/ A$ V3 |  port.start();
( P& u! b1 J% P2 Z3 N};
8 j8 o- A4 ]( ]* ]) q: P% [% D/ Z7 ^

2 [! _, Q& H, H# ]$ \% g% k' k1 Z; ~- }1 a0 P
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-26 03:12 , Processed in 0.750225 second(s), 51 queries .

回顶部