QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
0 N6 V' Z6 N  T+ r
6 P" j4 s5 Y6 o, [; l; Sconst sendMsg = new BroadcastChannel('logout_channel')* V7 `* C" h* L6 }' O6 Q. K
sendMsg.postMessage('清除缓存')) Y3 J: E6 C& o8 ]+ H
onMsg.onmessage = async (event) => {9 ?  Y  T. u) k. w5 l" s
   console.log('event清除缓存', event.data)' i/ D- j3 w! }4 Q# _& X: M
}
! C/ |  D- z6 X6 k$ u$ X% Y8 @6 w9 ^8 b( P: `4 p/ E
二. 使用SharedWorker
6 |; u& X0 R7 N5 V* E; @. V2 i1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
/ m! f4 q& L  j3 ^: U
" ^8 f9 U. X( B// shared-worker.js
7 C2 Q; v! t! o) p, x. B* jonconnect = function(e) {
, H2 D2 {; [" E8 X2 v. g' w4 i0 K  var port = e.ports[0];' x- u% a4 G, A7 ^0 Q

) a( v  |, ^& q( V+ I  port.onmessage = function(e) {
  `4 m  Z& ]5 V, I    var message = e.data;
1 D4 s8 b7 Y% d: T4 y% u! u" [7 M9 H7 P    // 在这里处理接收到的消息5 ?; C' ~* v+ {: d2 E6 |7 U
  };
% L& @( ^* g: w9 T6 I. o" i+ E9 i3 G8 n1 \: k9 p0 k
  port.start();
, m0 D5 D! ^% n* B};
1 s$ a0 D% f5 G2 ?5 d+ I
) x/ h3 `' ^# U7 m在多个窗口中分别创建SharedWorker的端口,并发送消息。& V) {* j5 C, m8 c$ l1 x
// window1.js
$ _% K8 g: T) gvar worker = new SharedWorker('shared-worker.js');: o2 M0 j1 {$ J! p  j! g
var port = worker.port;8 a# \, X4 o, r, c% U! A2 l8 J
% C8 D* @% o4 c: L. v
port.onmessage = function(e) {
2 T: N4 U! N( [  `4 i  var message = e.data;
% p- W* o' E/ q0 ^  // 在这里处理接收到的消息
) v2 f' W$ N1 u& X0 ^' K, o};
9 n; X6 F6 n" c' O) s
, A# N- _2 P# Z2 |' [port.postMessage('Hello from window1!');
1 d  p9 s0 j) U' T
$ U+ c/ I# t5 n: d) I' K- r// window2.js: y/ N  D4 S7 X" b0 F; d# S
var worker = new SharedWorker('shared-worker.js');
: P9 z2 @2 X4 I& k" p& F" T% y+ Evar port = worker.port;# y6 Q7 s2 z! L: m* F6 V

1 I0 B8 L  t- Q7 Hport.onmessage = function(e) {' g! }2 T2 K" I, L  \$ X
  var message = e.data;
* }( G: o9 t' b; |  // 在这里处理接收到的消息: w2 f0 d' g9 M7 G
};- k! A; O/ o4 p; z2 Z" w3 Y0 {  y

" w* Y5 s1 R0 A) o3 |port.postMessage('Hello from window2!');
6 G3 v9 _( w( v1 c4 B3 @  U$ Y. S$ x. R( G. F
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。) d+ o) W' c# i* `& |
// shared-worker.js3 F  W5 S" q  ~8 F9 X; l# ~0 }$ ?
onconnect = function(e) {
" G$ H# Q/ K* ?, I% F$ Y0 T  var port = e.ports[0];, t! y; l0 F" n; a

/ }* ]+ v- O: }6 H, j  port.onmessage = function(e) {" V& r5 @3 ]; {" T8 Q! ~; G
    var message = e.data;, U/ E1 c, `  e" A& D
    // 在这里处理接收到的消息; z& z+ G4 _+ w- L, R# q

: I1 T  w5 ?: K& C" P0 f7 m* r    // 向所有连接的窗口发送消息
/ }3 i7 H6 q* x  V, W0 f    e.source.postMessage('Hello from SharedWorker!');, H% b" V- ~8 `8 ]+ ?5 {& F' x
  };
8 r6 Q7 c8 V0 @8 ^( [  f. K  e% @* s5 I
  port.start();& v* s9 Q# d+ r' o6 [. k
};) k9 U) T. v4 u
" b' ?9 v1 p5 @
# c* `" L3 R# ?& d
0 T# c  Z- K3 F4 q& J" a
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-7-28 12:25 , Processed in 0.327983 second(s), 51 queries .

回顶部