QQ登录

只需要一步,快速开始

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

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

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

1183

主题

4

听众

2909

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel5 v1 b- F7 m8 W1 O0 j
* s  G5 L+ d: r/ }% y
const sendMsg = new BroadcastChannel('logout_channel'). Y0 M3 S. t5 q, y1 h
sendMsg.postMessage('清除缓存')4 Y3 A, u1 s9 j. b  H
onMsg.onmessage = async (event) => {% j+ `& x" Z( V0 z2 Z* s
   console.log('event清除缓存', event.data)
5 d! w, Y* Z) @% _# E/ I}
$ V0 C& O" U' U, w0 s' |. x) O% J( a! ?# o' F
二. 使用SharedWorker
# Y& G) d( m$ E5 i: `1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
' J5 n, y( E3 y0 {" ^3 Y5 d
+ z& L8 A1 D" ^8 k// shared-worker.js" N- d% P9 J+ o( V( \
onconnect = function(e) {
! o, R1 c8 {% E* j+ }* A  var port = e.ports[0];6 F. M) S* J/ Y" a7 W! d

: H% L7 O7 L& o& E) `7 b  port.onmessage = function(e) {
% \+ ~! j* v. g( E& W9 p7 c3 X$ |    var message = e.data;0 l4 x% O: v- O5 E" m- ?9 S
    // 在这里处理接收到的消息2 a% p6 Z9 W. t, H$ R+ [
  };
, [- S" F. Z/ |! x! v2 g# Y+ e" H" g$ I0 K, J) X5 n
  port.start();0 H3 M8 W: X8 M+ D
};
" G- b; v$ y" C2 R$ P- J( l* g/ E1 F) C3 |3 o3 z
在多个窗口中分别创建SharedWorker的端口,并发送消息。. H. d3 {  _1 `+ V* i" x1 c: ^
// window1.js+ f: i% j0 y. u$ M
var worker = new SharedWorker('shared-worker.js');
5 @4 f$ N3 i( i9 Hvar port = worker.port;
; F) F! G$ O+ c9 x: d
& U; G# w, m7 d* w8 p; Qport.onmessage = function(e) {0 J& H: u$ l1 {# x5 f: R( `/ U
  var message = e.data;( I* @) Q. Q7 I: I
  // 在这里处理接收到的消息% K) ]! D3 h! B% Z' C
};) a$ i) ]7 L+ ^* C

6 s2 }% l7 ~$ z: Tport.postMessage('Hello from window1!');
* ^. M. I8 r! P3 l& ^$ `, [4 c" n5 H2 h- K
// window2.js
5 w. n+ |( M+ G& D7 B0 fvar worker = new SharedWorker('shared-worker.js');* M8 [) L. z. q0 B+ k* g
var port = worker.port;3 C+ K4 ]; [, N
1 x) y% ]+ B" i" @- M$ V! E
port.onmessage = function(e) {1 h3 P% O/ K& u4 M$ {3 b& Q) N, G
  var message = e.data;" ~: ]2 U( C  D, i- j1 e
  // 在这里处理接收到的消息1 Z( P9 }: a; u: i% {5 C8 K9 B- n
};
0 s0 @; C9 `+ \4 B) T- f# n0 Y' v* S# @; K& I, _
port.postMessage('Hello from window2!');" ]  x7 E( T0 x9 |/ X

5 o* z. x, q0 Z  T, E& F1 ?  X在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。/ Q) L% M% A8 B$ n! m# h) T
// shared-worker.js. q  [+ n9 o' T9 E, r- X
onconnect = function(e) {. u6 o( X3 A7 v" q& J* z
  var port = e.ports[0];
: H3 x# A' h6 K9 e3 Q8 X* I0 e
  port.onmessage = function(e) {
$ J2 T! k$ C6 x& N, J" R+ u    var message = e.data;+ v$ }5 [  I$ O
    // 在这里处理接收到的消息) F3 N7 z( u9 x4 K! G; H

" C5 U7 r* ?0 w7 d    // 向所有连接的窗口发送消息0 @  J5 [5 I, z4 O
    e.source.postMessage('Hello from SharedWorker!');& e$ n" V# K2 b6 M
  };
2 }8 r4 ?% l4 [! G8 {2 M/ m( \8 o( F% X* y. U3 @4 n
  port.start();2 o& ~/ ]' W* ?2 o8 Z( t
};( C* `) Z( u; \) {

+ j% w( \' }1 X; H8 }6 Z
: a' `* |* S: R* J6 p4 L
! r$ {+ }  A: J8 b
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-12-9 00:13 , Processed in 0.382975 second(s), 51 queries .

回顶部