QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel0 B0 [$ _0 N+ {: Z

! b- S4 U: o7 p9 u% `const sendMsg = new BroadcastChannel('logout_channel')
% b3 P2 `! u9 j0 ksendMsg.postMessage('清除缓存')
7 t/ {1 h8 I0 n9 nonMsg.onmessage = async (event) => {
# C9 x7 t% I' }' y% T* L9 C0 c) k- f. H   console.log('event清除缓存', event.data)
+ L! c  b  v1 N/ V' V' y' W1 K}
2 S7 l' T8 p0 F# q# {, a% T8 E  b# W  Z) `) D2 T
二. 使用SharedWorker
# k8 o; J9 y% x1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
7 z" y4 G/ L# O# a. ~
' A0 _- W# \' Z) Y$ `// shared-worker.js
4 z3 H( {, u7 M" o. I/ ^  Gonconnect = function(e) {* n* ^$ S- c6 z/ T0 ~  T; Z
  var port = e.ports[0];7 H$ S4 B) W( F- b& Z4 y* n9 y$ W

8 Y  t. P; u0 n4 H  port.onmessage = function(e) {
* C0 Y7 C, O# w. \    var message = e.data;
" g# ^+ j3 g# {9 [) \& H    // 在这里处理接收到的消息
; J7 T* r) d3 }& M  };
! ~4 @. v( |( Z, i5 r' h4 T4 w
" V* D* R0 |+ R2 l: n; M* F4 u8 g4 C  port.start();, U9 x. v9 e1 Y. \- A5 c
};7 r; U* u4 Y2 R. N! M1 A
' C) |. R! J: D
在多个窗口中分别创建SharedWorker的端口,并发送消息。
4 R- j& x2 j+ y2 R0 E// window1.js
3 o* o: Z6 @  n6 q  W7 k3 P: D: vvar worker = new SharedWorker('shared-worker.js');/ ^+ h6 V9 y! l' s3 D
var port = worker.port;! a9 M8 U! m; V* w1 n, k
0 W  M* ~7 L! d, S( k' D% j
port.onmessage = function(e) {
) O% F  b6 C1 {* i$ s3 I  var message = e.data;
, W2 w+ W: q4 j+ w( u8 P2 a  // 在这里处理接收到的消息
) h: j2 z% A. S& k$ A* H7 l};. j! h) F  a" M+ o

+ R: P, f1 d8 m$ t0 w* Z+ i( Iport.postMessage('Hello from window1!');
# E- s' z* Z1 b2 U8 B6 Q6 Z7 _. L% O1 D  C6 P8 l1 x
// window2.js7 P; d$ v6 J# `
var worker = new SharedWorker('shared-worker.js');
6 R+ j0 ^$ T  y! f; D7 u4 ?- Uvar port = worker.port;6 x+ [/ V6 u( E; J* I. O

, {6 D' v6 ]1 a% w) Vport.onmessage = function(e) {
, v8 t  i! A6 u6 V# O: B7 \  var message = e.data;0 m* B2 y" B& |- `& [
  // 在这里处理接收到的消息
4 H& p; D. Y* x/ n: h, n" S! E};
# X' c& H1 X1 x+ J" @8 C% r/ e5 w' C. q5 V0 j
port.postMessage('Hello from window2!');
2 p; m" p; K# J" E
; d* v& ]- m, @( ]& {, p$ w& @在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。  N8 d, k$ y; p9 i6 U
// shared-worker.js
# L7 o6 U" n- }$ ronconnect = function(e) {9 D( G# u. R9 l5 z& k" p$ M8 f
  var port = e.ports[0];6 k0 x* d, C7 N& d3 o& z9 J
+ r! I- Y' N  a' M# Q
  port.onmessage = function(e) {
# k) n( \# N( a" B* N$ S. Z    var message = e.data;
" ~5 E( s& p4 }3 ^4 _* }    // 在这里处理接收到的消息' X  |% s$ B& O9 F6 x" G

+ L6 U$ z! d- e9 w3 \    // 向所有连接的窗口发送消息
! t4 Z2 V' V: U3 {6 c    e.source.postMessage('Hello from SharedWorker!');
: _/ q2 R* H, r1 f2 n0 x  };- q' I' u3 ?7 ~4 |2 }' L
: @3 v3 O, u2 ~. Z9 I! \  K& l
  port.start();6 @0 u+ I. M3 K2 {1 E7 J7 m
};
' `( |$ V1 D' v. t2 E" D0 g/ ~2 I1 n; r& z4 }
, M  T# m5 y  y- H1 o0 K3 Y2 A

4 b2 s$ w- N" P& i# t8 [( @2 Z
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-10 15:10 , Processed in 0.329411 second(s), 50 queries .

回顶部