QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
' n1 ~5 T, N+ U* r" Q! I" e- _4 |7 }3 |  |5 d. K1 b
const sendMsg = new BroadcastChannel('logout_channel'); A  a4 h0 w% |( \+ x& N( C, W7 r$ `
sendMsg.postMessage('清除缓存')
: @2 X0 o  T6 RonMsg.onmessage = async (event) => {
5 P) C, ?1 r5 f' Z1 `7 D% @  B   console.log('event清除缓存', event.data). M2 s. X  B* x( L1 u, d
}
, ^. Y6 h. j2 b# E8 r
( p, J! u& ?5 P2 Y9 m二. 使用SharedWorker' a! t& s0 q/ U2 Z5 u7 L9 c
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
0 D' v+ q. t% A: j7 V* d7 Y
$ E: M) b) D4 Z% \// shared-worker.js& k6 |  Z- Q- p
onconnect = function(e) {1 P. X6 p6 \* O; G  J4 p
  var port = e.ports[0];- g1 b7 }/ E3 i2 Y
8 C; s9 K7 J2 G" y# ^' Q
  port.onmessage = function(e) {3 E! u- q& _' F  J/ Y2 X5 l, j  H" P$ F
    var message = e.data;3 n* L% h( m0 n; X. K! p! j' w
    // 在这里处理接收到的消息
- I2 a1 }" v, u- `' v& j& A2 g3 A  };) d" N! M, N# y
6 {" b) h( z7 _$ Z. k0 L
  port.start();
" H# p! f) l/ s& P# \! I};
7 {/ O. c% G& i; d7 R2 F, T% K! F# n$ }  Q
在多个窗口中分别创建SharedWorker的端口,并发送消息。" `' |6 S8 X1 e' b5 g) {
// window1.js( l% v* N. U. f
var worker = new SharedWorker('shared-worker.js');& b0 [* U" S0 d
var port = worker.port;
- g! M+ E- W; g3 @( ?, C/ u1 u$ V) ~+ k  Y3 J
port.onmessage = function(e) {/ Y- R1 J0 x) G2 p
  var message = e.data;
6 Y% ?) u/ T% _& h  f4 Z" Z8 C. ]) h( w; L  // 在这里处理接收到的消息$ c" S( @3 N% b5 S0 j
};4 z4 J5 R! l* e0 D7 K$ j, W0 F
2 d% U4 E5 u; ]6 A9 K, [4 q
port.postMessage('Hello from window1!');
0 @! f+ i! }# F0 J& L) ^
: U4 M4 D* a4 e8 o// window2.js
( a5 A8 t9 K% V8 y7 ~) w) g6 x8 N0 xvar worker = new SharedWorker('shared-worker.js');
9 P$ }3 n' T; gvar port = worker.port;
- W! U" M1 T2 S; B  J& i) N" W: X; C. j2 m
port.onmessage = function(e) {
: R& _0 z# B6 O/ c, v. u" F, F  var message = e.data;2 _$ d0 L: a, u
  // 在这里处理接收到的消息
) k4 j4 h3 q* \4 ]+ r};( H) {& R& r$ X9 Q

& F9 [) D. d+ B8 E- N- {9 G" E, _6 ]port.postMessage('Hello from window2!');
( \& ~5 k8 t8 c. s6 X1 ^/ F# J& o0 _1 _: Q
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。! s! R5 R8 ?5 F9 H# T* o# a" p8 ^2 h
// shared-worker.js
' T; H; t- G: s. ionconnect = function(e) {7 [4 V* ^/ y3 S
  var port = e.ports[0];) f" x: g2 f9 a7 Y( M7 w% B
- G1 G7 ~0 Q7 }+ s. w6 y0 H/ c! s7 F
  port.onmessage = function(e) {1 |6 @, s1 E1 ~1 W- |; q' a
    var message = e.data;' G- Z8 E* K4 M
    // 在这里处理接收到的消息2 z& ~6 s+ R, S7 l- J
# `3 H0 R/ D. V5 V
    // 向所有连接的窗口发送消息
! }& @9 a/ A$ i    e.source.postMessage('Hello from SharedWorker!');
7 C* `7 `3 X4 l) k  };6 _4 n4 ?: f6 A! B9 ]7 |

. t" P8 _1 n3 p4 d! ]$ @6 B  port.start();
2 e0 s4 D  i1 a. o& M6 C};" [' n2 r5 d9 |. u3 {

, q4 X5 b( i& A1 k9 k: p$ }
# H+ _, s9 C) S4 M6 F. S8 d& G4 |8 W/ v  F; E) s5 o
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-6-12 13:10 , Processed in 0.282034 second(s), 50 queries .

回顶部