QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
* [) t$ T; J( L  ]7 O4 D4 g/ P2 t
. B0 `& N! T+ P: xconst sendMsg = new BroadcastChannel('logout_channel')8 p9 f; e* m8 ?
sendMsg.postMessage('清除缓存')
0 p1 k3 G% p6 {$ L, lonMsg.onmessage = async (event) => {$ Y0 _$ I+ U) G- D* k6 y: x
   console.log('event清除缓存', event.data)
8 \+ s2 x9 ]5 U6 _8 ]& `* F}
5 Q" Q/ S; f: l/ H. g( l( a4 Z2 y3 d; H. F8 [4 B9 O5 S/ U
二. 使用SharedWorker
; A2 c- @- ^% n1.创建一个SharedWorker实例,并在其中编写处理消息的代码。4 |1 X, U& y1 }& M
+ a4 F! _3 U/ N% b8 z) Y
// shared-worker.js; W7 J, z/ z; l7 G. K* k# n
onconnect = function(e) {- N) D  S3 I9 |. _# q  q. [, v2 x
  var port = e.ports[0];9 p2 u3 q9 H# X) ]
" P+ ?% M0 [5 R8 |2 l/ i
  port.onmessage = function(e) {, g; G1 s0 ~# f" s3 q* v. B: K; |- ]
    var message = e.data;2 `) b- a$ m" Q8 {) b" G& H$ x
    // 在这里处理接收到的消息
4 v+ d. ]1 C& l7 A) D! o+ L% h( s  };
, \* E8 l8 l% C. ^% _' Q6 w  M
  port.start();
1 O% ]( U. h) K' }5 ^};
' z$ Q, E6 d! I# k
* ~" ?7 d+ _1 t7 E3 m/ w在多个窗口中分别创建SharedWorker的端口,并发送消息。* H& r. F9 }3 _9 x2 {
// window1.js$ l; T1 _) g4 n8 s# a
var worker = new SharedWorker('shared-worker.js');
$ k0 v/ l$ C  Zvar port = worker.port;
4 H+ l  W9 l1 K/ A8 u6 l* U' o/ }
" l) W! Z" g0 I# d# v0 Uport.onmessage = function(e) {
$ c2 _) i8 r* a+ ]4 K, s% Q7 r  var message = e.data;, B& B3 l3 O9 F  l7 D+ _0 c6 e
  // 在这里处理接收到的消息1 L7 o5 w3 E. ?; F7 E/ a
};3 v$ i; N' _9 U( e2 _

! M+ a/ `% r/ a4 bport.postMessage('Hello from window1!');( b' I5 d. b. |- E3 \6 D$ U
% J  L! S+ A" G  W) |
// window2.js/ y% z- @. L( _5 ~
var worker = new SharedWorker('shared-worker.js');* L3 b! |5 k, C( s% a
var port = worker.port;7 i! P" I; x/ [' T( \+ D

" u+ L6 x2 @) n4 l/ |port.onmessage = function(e) {- i% T! _  [+ ]* Q9 k7 o3 v
  var message = e.data;
3 P. e" H# ?* e+ \  // 在这里处理接收到的消息
" C# D: i6 ]: N- x8 z. _; r. d};
/ v4 E. ^: H' P- S
. J1 C% q& s  C2 T& ]. ^* \port.postMessage('Hello from window2!');+ M  {# o% b/ ~
) p) ~  l( g; D% n$ o
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
9 e6 C: _+ M; u& S; x// shared-worker.js
  O* U7 K' K! S6 h8 O$ yonconnect = function(e) {8 ?1 @2 y* I& h9 P. k  J0 v' j
  var port = e.ports[0];6 x/ P7 a: I7 f/ d: R+ E# X; \

- E7 o- |9 P* p5 k& g/ t7 z  port.onmessage = function(e) {
, z9 M) N2 ^' i3 E! Z$ i    var message = e.data;
, y6 I$ s. Z( Q    // 在这里处理接收到的消息
# d( W7 B# z# n) l* P
* K" B' \3 ?# a    // 向所有连接的窗口发送消息  M- E! u4 b  Z# ]
    e.source.postMessage('Hello from SharedWorker!');
6 P, N1 b# |4 w, |. b5 I. b  };
6 }* u0 ^1 ~% b/ s+ E: P: C
( U$ j! x8 a4 G0 f( i/ U; J  e  port.start();, o1 @% U) L/ {. ^* |* r
};' O9 z# s9 b0 }0 z( q+ J

2 d$ @' `0 i( w, M
( _6 L9 ~, k/ R  a
& H" S& S. }2 A2 v; A1 k
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-10 08:20 , Processed in 0.417787 second(s), 51 queries .

回顶部