QQ登录

只需要一步,快速开始

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

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

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |正序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel( k! \$ S; @4 @4 s0 J2 G; r

: u: D1 q* u% I7 {" e* ?" ^! Mconst sendMsg = new BroadcastChannel('logout_channel')1 P2 s+ `; O5 E
sendMsg.postMessage('清除缓存')  ~8 \0 t7 o' s7 b$ Z( r5 ]# W
onMsg.onmessage = async (event) => {
9 T# E# w) e: N' Q, p   console.log('event清除缓存', event.data). N* n6 h1 x: a( g& T& L; I7 P
}  h$ I: T( E1 |- f% C# }' j

3 r) b, U! D4 [: a4 b二. 使用SharedWorker
& E: Y4 x" m+ w  G) a1.创建一个SharedWorker实例,并在其中编写处理消息的代码。  ]9 j( ?. A$ G: B9 K6 g" e
0 ?/ `6 l  B! C' B5 @
// shared-worker.js' O1 n% h9 v8 j. n5 h
onconnect = function(e) {
% S  {1 a! |; Q) X8 k  var port = e.ports[0];2 ^5 j, o9 K' C
4 z- e% h, `' }2 L
  port.onmessage = function(e) {) _9 v1 ^$ s2 v8 Q
    var message = e.data;& R. T% Z: C' j% Y6 W2 V9 U
    // 在这里处理接收到的消息
8 Z7 N. _! b5 D8 Y+ |* n4 E  };  H/ ^  H/ q/ q' }1 Y! S
" ^& ~0 m; ^0 {& R
  port.start();
; W4 s. F7 @+ e9 H2 j9 u& S};
. m. |7 N; G! H4 D+ R: j9 \5 F6 ~
在多个窗口中分别创建SharedWorker的端口,并发送消息。" @% ^2 A0 M1 `
// window1.js4 N' X  m6 m9 Q& R. n! o2 L' `
var worker = new SharedWorker('shared-worker.js');
. e0 S( P& `+ mvar port = worker.port;, I  `# N! F1 p4 B6 H  }: m

8 o+ y/ T& N; r$ X" ^- r7 pport.onmessage = function(e) {
% t3 J. \) r3 G/ R  var message = e.data;
. i# o( d/ s7 I  _7 n  // 在这里处理接收到的消息8 R2 t! r8 M3 {) x' X5 J4 }+ Y
};2 H( o' x" U( b

4 s# x/ n( q$ o% g4 W9 }port.postMessage('Hello from window1!');7 T. L& Q; L1 Y9 P  K5 y7 f# p. V

# V$ K/ C& c0 L( d1 _// window2.js7 ]; H8 V! X! r; d9 Z6 n: X; R
var worker = new SharedWorker('shared-worker.js');4 Y! M$ R8 ~7 _9 M. l9 b
var port = worker.port;/ A" G4 W5 @5 Q$ Y+ }% `
: U. O* I4 G. a1 ?) T8 m! R
port.onmessage = function(e) {
9 A8 q9 P/ ^( o+ P  var message = e.data;- R7 T% N: [1 o
  // 在这里处理接收到的消息; C3 i) j8 w5 W# E3 c2 i- |' ^
};0 n0 D4 ~  I0 I  ^6 C
( L; X: o+ [. H: o2 F
port.postMessage('Hello from window2!');
" `% y5 z$ U; m8 h) ^" W
) `1 G" j+ R2 [- I5 G3 Z在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
$ p9 [4 i# F, l+ B// shared-worker.js
0 O) T4 U( `0 {' ]+ Oonconnect = function(e) {
! v6 l- p/ {5 X5 Q  Z8 z  var port = e.ports[0];
: n2 h, q! [0 \0 `& W3 C, }4 M/ F7 }+ r0 E* J1 g# b
  port.onmessage = function(e) {) Z; s/ M2 T: _) |* {6 A
    var message = e.data;* G1 c. P: I6 F4 D
    // 在这里处理接收到的消息$ C) }. O$ S: `: T. Y  v

% s0 H3 k/ h2 v/ C    // 向所有连接的窗口发送消息
/ Y+ ?  z4 `2 Q" G5 ]    e.source.postMessage('Hello from SharedWorker!');: x& o( U2 D3 J- c. P
  };/ }3 |- r& O4 ^, [7 k$ g" w5 C
5 E6 |( X7 T0 F+ O, ]0 s) s3 |
  port.start();! l3 E4 a" b0 S+ G- D$ l; T% I( P
};
, N" e. W) m- n2 t3 U" D8 B# c* Z( F6 h7 Z! q, @) ]4 y3 N
7 y# O- ?; X: O, j

$ [- C5 A; |2 h) w7 a& N1 @
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-26 14:06 , Processed in 0.510452 second(s), 51 queries .

回顶部