QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
8 U( h  u4 D* K: r# |. v4 e
; P! h6 r% L* n7 \! b' |const sendMsg = new BroadcastChannel('logout_channel')0 J4 X$ k" x; j( ]/ N" \
sendMsg.postMessage('清除缓存')) v( h, L$ B" e$ I- i7 @0 ?
onMsg.onmessage = async (event) => {) p+ e, F) U. G: N+ R. G, h! A
   console.log('event清除缓存', event.data)6 {5 [: ^% ~: y6 T. L: ]! ]
}
: e8 @: R% W1 N$ i: X8 h2 j4 \4 o. M$ }# K
二. 使用SharedWorker) _2 D1 m' {# ?' A5 X( N
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
0 ^& S5 G& e5 M% ^9 {$ J; W* R, c/ W+ F7 \6 ~2 {
// shared-worker.js
' U0 A9 b9 ^) Gonconnect = function(e) {
' W1 d5 J/ M- I6 }2 r: l7 T  var port = e.ports[0];
( m3 D* p& N1 o9 L. h% v. A  K) [. n+ h3 i! Q5 w
  port.onmessage = function(e) {5 ?: C. p% \$ j3 I/ R
    var message = e.data;! N1 N' e7 u0 K
    // 在这里处理接收到的消息5 v$ W$ [! Q5 b2 l! |
  };
3 P: x) x. @/ @- h) }. _& C% R4 e$ _7 E
  port.start();( e8 [4 x4 H/ n$ c2 b
};
! p5 w/ {& ^& [5 M, h; Z7 y9 r  d; V9 W
在多个窗口中分别创建SharedWorker的端口,并发送消息。+ _* w% H" S* n% l
// window1.js
5 k2 d% l- E& m4 `* Hvar worker = new SharedWorker('shared-worker.js');$ U' n! n0 H' p1 Z) @" [
var port = worker.port;3 m! [& \- e4 ~8 A4 n( l- P

: a5 z  s9 ]4 S% y' y1 x0 Rport.onmessage = function(e) {
& k% @0 h, }1 j8 Y  var message = e.data;
; `/ j0 A; ^2 E8 f  // 在这里处理接收到的消息9 W) [/ j# }: A
};5 Y) M- w4 I+ }
. {0 n" o/ b$ {
port.postMessage('Hello from window1!');
. }9 q. S, x( w& w, G8 ]* j$ u$ O" a0 W, w/ z6 U6 l% Y
// window2.js$ g  b: Q. L4 y$ W
var worker = new SharedWorker('shared-worker.js');
: h4 j3 A( b. z' Q) k4 e0 Gvar port = worker.port;" t. L( X! H/ J0 {0 q/ d- m
* ^( w2 Y5 H+ r
port.onmessage = function(e) {
4 i# I, [5 o! C# `) y& Y  var message = e.data;$ q+ k7 z1 j  g5 C. S( |
  // 在这里处理接收到的消息
6 N! U* o- A, z};
& w- x5 O5 ], m4 W" s: Q
5 q% D* e* s2 U* lport.postMessage('Hello from window2!');0 G* H/ C* J+ ?9 O) f

, a3 S0 j# V" n; ]在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
: D) G* e+ A/ g% s// shared-worker.js
, \  ]+ H0 T! M; T! U' conconnect = function(e) {+ b6 g+ t+ n$ t( C; f% r1 J
  var port = e.ports[0];! F# s& Z2 _3 K6 x

0 _3 [; ]" O% U" H& X$ d8 q, ?, s  `  port.onmessage = function(e) {4 m# V* |2 }' ~9 V9 C. r( _8 m
    var message = e.data;
. F8 s" [; Q$ C& s( g& c    // 在这里处理接收到的消息4 f! {: J$ [1 j% p. f% G( p# o) n, C
. O# T4 d% H' A, a3 s+ U* S( w
    // 向所有连接的窗口发送消息6 R2 r* [2 B8 Q% d
    e.source.postMessage('Hello from SharedWorker!');7 F% c+ P) v& d6 x
  };5 h0 K* E6 g6 O
& r' s0 |4 {: w  @, {) z3 [# h
  port.start();7 o) m! J: Z( I* m
};3 ^9 i3 {8 Z$ B+ m4 ^& H8 _; L+ u
  e! O. ~) \$ h  H/ d% e
  |$ _; {* h/ @$ y5 ~  r

  h- @8 }- i8 G/ n# f9 J
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-11 07:13 , Processed in 0.307641 second(s), 51 queries .

回顶部