QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
7 G2 B: s( Q6 x( C* x- u1 n
6 C! ^9 [# F' `const sendMsg = new BroadcastChannel('logout_channel')
# b( g( [# D# C1 m1 qsendMsg.postMessage('清除缓存')% I2 i2 ^/ M  u
onMsg.onmessage = async (event) => {+ G7 o( z; _( [$ ^/ ~' a
   console.log('event清除缓存', event.data)
7 K+ G5 m) E1 o8 `}+ N: ^/ [) w6 n: k

( y5 y( ~# Z+ F1 e: o二. 使用SharedWorker' }: d; w# P+ f
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。) K5 |" {- k0 E, V2 n+ l- J. j1 g

( p4 R7 V) {$ S+ j& p* O// shared-worker.js
* V) j# J; A+ F/ Ronconnect = function(e) {0 w( t5 H! ^$ q: k, o4 P
  var port = e.ports[0];! q6 c4 e) S' P, d, j) D& `  O
4 S$ H2 c8 W3 F3 P: F8 C
  port.onmessage = function(e) {
% f7 o; j% V7 c4 G+ ]" W+ C  S3 h' P$ g    var message = e.data;
8 \; s0 W7 K7 X1 {0 b    // 在这里处理接收到的消息/ D+ E# l7 X+ N+ g8 A" X' l
  };" R6 a% P0 f1 F. [! P4 R1 {5 ~& W
( E; U. @( y9 _  c
  port.start();% K- J# |8 p* m4 O) |8 N* T2 S
};
# N, j. I6 Y2 ?7 g9 |; `; W0 i
6 c; |0 S1 w9 u3 n+ P- P# r在多个窗口中分别创建SharedWorker的端口,并发送消息。1 V  B9 I; y# h3 Z8 e
// window1.js
% v. V% i3 l% q! ]4 r+ Tvar worker = new SharedWorker('shared-worker.js');, N% G5 A. C! W7 n- ]
var port = worker.port;
9 ^' q8 o3 `9 l4 b$ z$ g% w0 V9 u* O3 G  W7 L& j( E4 b' J
port.onmessage = function(e) {& S& P! N& S! J, ~* N
  var message = e.data;) b% t6 n1 U3 e1 m
  // 在这里处理接收到的消息8 Y8 p& k$ ~, V" C* F' B
};
: N1 \: L. [% W. c; V( I, [  O! _) x! L" W) X8 _6 [
port.postMessage('Hello from window1!');+ i: w, t% @+ f0 n  {9 c* F+ h

# \2 v" \6 u+ v1 b; B// window2.js
4 }& l$ x# z% f+ \$ I! A8 H; `var worker = new SharedWorker('shared-worker.js');
% R- B9 K+ a! u2 G4 ?8 r/ qvar port = worker.port;
2 L7 s. G9 \* T6 T4 s+ t& {" T2 K2 [1 r8 Q  {5 Z/ X
port.onmessage = function(e) {
- A' c7 O0 D# I' T0 l+ }/ T1 [/ R* K' N  var message = e.data;
% y* l4 n2 ^8 c3 i" a  // 在这里处理接收到的消息8 ]- W& x7 \$ {& M  @9 B" E; G' e
};
. q- R$ D+ U; q) H! [. ]! L; Q% H. D0 B. w* L; K
port.postMessage('Hello from window2!');
0 @- J2 w( Z' {; x0 m( D- A& o6 W! L' C" h& ?
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。, _* X# w2 e' q  ~0 g# d; L- F
// shared-worker.js
8 `$ w1 A7 W, U8 u' ^) ronconnect = function(e) {
1 E* u# F+ k+ Z& S  var port = e.ports[0];
/ e' [% b7 G2 n5 V3 i' R+ o# |1 Z' I. ^. S6 O
  port.onmessage = function(e) {
/ z. j9 X" c$ h3 M$ O8 C1 a    var message = e.data;  A! d! \9 ~6 {9 k) g8 |
    // 在这里处理接收到的消息  T: }0 Z% V. V

& E. t# W& s4 {( E    // 向所有连接的窗口发送消息8 w# K  f8 O) v
    e.source.postMessage('Hello from SharedWorker!');
% j( K' |7 P& V, }$ u7 g  };! t6 W/ x$ C. e; R. \& e" ]: z

9 b: F1 k' K# G; O  port.start();
' D. s; n  H$ `" K3 L$ ~" z( c0 h7 E};* e' S* A5 w( A5 L$ r6 L
( |( O% a1 R! C
: d4 Q' v+ w  q" L  |
" v5 g' d& E4 [  n
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-4-16 08:15 , Processed in 0.419500 second(s), 51 queries .

回顶部