QQ登录

只需要一步,快速开始

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

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

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel  O; J- Z" V5 \' D& ^

  x3 J5 |- v8 C7 Econst sendMsg = new BroadcastChannel('logout_channel')3 U. m* g& T' z
sendMsg.postMessage('清除缓存')3 V, E% S% o8 L0 r3 w: G9 z
onMsg.onmessage = async (event) => {7 y8 C+ R- l6 g: u
   console.log('event清除缓存', event.data)% L( I/ S$ V4 `2 z+ l0 Z
}
5 a3 D4 f) M8 o+ |$ F9 n$ X0 N5 a" V4 j# P* ~9 y' @+ k
二. 使用SharedWorker6 J# ^) D8 `0 M7 c# V) j+ [
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。+ y. `+ ?( {4 @  O5 e- W

+ i( M, d. L, U5 }9 x// shared-worker.js
3 f$ d4 D9 p$ Lonconnect = function(e) {7 l& U3 X8 J) E
  var port = e.ports[0];! n( ^1 }$ P& t# y! j

% V+ |' C; P; [$ K8 i$ R8 ]' K  port.onmessage = function(e) {
0 g2 l& w# g4 Z: r    var message = e.data;0 L! `3 a7 |1 i. T% a: K" I' |
    // 在这里处理接收到的消息5 W0 U" c- c4 Y. `& Z) E
  };
2 t6 q) J8 l1 o# h" ]# ]. ?
6 T% Z: _. _0 r6 Q1 K1 \  port.start();
0 r  {/ G4 H& i/ ~, S};# |( q. I! X2 A0 J2 o5 ]) ]

- m/ {7 p9 \4 o# {" g. U! y6 b在多个窗口中分别创建SharedWorker的端口,并发送消息。
2 F: n0 Q, w6 V! Z6 l, c* V5 ?// window1.js
+ ~3 L2 \3 }! ]var worker = new SharedWorker('shared-worker.js');) i- G$ A& a: f# M, y
var port = worker.port;# G, J: c- C5 d8 y
: h. b2 O: d. ]* C
port.onmessage = function(e) {
! C( v% _! z9 @  var message = e.data;
: D  {! U( q% P  // 在这里处理接收到的消息
9 W- r* h5 |" K( w' u};* R; n  ~& k1 S. k
: v. r, s- f( l3 r% W" R5 w
port.postMessage('Hello from window1!');
4 R8 Z* p6 u1 b  Z9 [7 X* s6 B0 p; Y- U  W% W+ I
// window2.js- W( t& `9 A, v! N; V3 e% R
var worker = new SharedWorker('shared-worker.js');
7 f0 V/ ?. J! q% a. {9 Xvar port = worker.port;
1 m& ?1 s& `' I9 q% `4 R" P- b% g) W2 I  M: S9 F
port.onmessage = function(e) {
& t" z' K) J+ o) d9 ^, a  var message = e.data;0 @- G8 m# N5 B. _/ q% w' @
  // 在这里处理接收到的消息
$ H0 S  y( I  D};
7 K& V* Q+ P" T( i4 v) v+ |, T6 C* j0 g% e3 @$ d
port.postMessage('Hello from window2!');
: h" j1 q2 ]0 m: P2 E1 x3 e* o5 s, T3 Z# R
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
% o! f1 I3 O% d; ^+ N" e// shared-worker.js
0 L  i; a# [" c, jonconnect = function(e) {
+ M$ A" Z  q6 _3 M  var port = e.ports[0];& k1 @2 D, `$ u$ D
: c6 D8 z8 D  M% }2 P7 l1 g
  port.onmessage = function(e) {$ Z( ~7 M7 ~3 M+ q
    var message = e.data;7 z) w. q7 J2 c( R& w. u) ?; k
    // 在这里处理接收到的消息  s4 F9 _+ s7 H" ~  b6 d
1 F$ |( y8 V; l$ p) r
    // 向所有连接的窗口发送消息
' D; |$ v( x0 a' w' O. D# a5 ?    e.source.postMessage('Hello from SharedWorker!');6 z* @+ [- u( }2 \% j3 [5 ]
  };) }" y* @" Z/ Z3 p

2 Y( n* d8 {; y' k  port.start();  N% A3 F& w- k
};' y$ [/ N" x4 }( K; t; P; {

5 q5 k# ?7 u- B, L$ y. r0 X
$ Z* H5 \1 X' b1 }
5 s* A% U2 ]: j& I* r; f7 L
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-25 04:58 , Processed in 0.508064 second(s), 50 queries .

回顶部