QQ登录

只需要一步,快速开始

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

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

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
/ V% @0 `* B+ P$ Z! ~  \9 i1 L6 \- `; p9 }; J' N
const sendMsg = new BroadcastChannel('logout_channel'): L9 _6 U# t' }0 d* D. p# ~
sendMsg.postMessage('清除缓存')9 }+ h1 W9 r0 x% `  y$ \- E5 f' n
onMsg.onmessage = async (event) => {
- K( }4 O* q5 v- G6 O% ^5 ]* A% ?5 Y   console.log('event清除缓存', event.data)9 d% }0 ?, T  K! l* e: f
}0 s# o% \- z( r( q5 W

8 x. _# h" Y5 ~二. 使用SharedWorker" ~2 b# V9 @0 F$ J& m
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
3 P' {2 I; m. C- a! ?6 K
( e  G/ c, g8 s0 S8 D8 [9 r" Y* k// shared-worker.js
5 W5 b4 M. I  m$ ?; S' U% }7 K- q" Eonconnect = function(e) {5 K' B1 |- H# A- A/ G; b  d
  var port = e.ports[0];+ l0 i5 k* k1 q3 D9 r( [2 o9 M

- J' c9 G* J4 _; b( O( |2 v0 A+ {  port.onmessage = function(e) {
& \/ {* K6 N* O! r, i0 L# J3 @    var message = e.data;4 W/ X  ]3 n* P& @5 N2 O9 V
    // 在这里处理接收到的消息( Q% u  Z/ M$ P2 f$ W
  };, i8 P3 G& N: s% @9 O* w- `0 `
$ j3 e. P2 A. v# Y
  port.start();7 |! C) {; ?2 \% H+ ^
};. Q7 B9 o# V0 L; D7 a

$ J1 I  |7 h, i在多个窗口中分别创建SharedWorker的端口,并发送消息。2 O8 T( `% R" \9 v: d
// window1.js
) U  [7 h& [$ i( [: uvar worker = new SharedWorker('shared-worker.js');
" `0 b. B# v) v$ gvar port = worker.port;
+ [. S$ Q& B, L; R9 l, R9 q, I: f" A9 ^
! _& N& F7 [, J2 \1 Sport.onmessage = function(e) {
5 l# Z2 p% w1 ?) C. f; O  var message = e.data;
0 }* W$ u$ _$ \! C' [  // 在这里处理接收到的消息4 z  U6 O' z5 ^* \( H2 v! b' s
};2 d* q! o) ^8 ^/ G5 \

# h, D0 W1 Q  o% G9 d! v" zport.postMessage('Hello from window1!');
0 \7 f: v2 |. L, u+ h/ s
+ J2 U. {7 o  @1 o( \) l// window2.js3 m& B) |7 l: Z, a. F$ O" n
var worker = new SharedWorker('shared-worker.js');4 e9 c6 m/ G5 C* T
var port = worker.port;
: ~/ T+ @: |4 s* a- F$ Q+ I& [6 u3 ]3 N$ w% {) L7 I2 M
port.onmessage = function(e) {
) E. \9 ^  N- I6 o) _  B& `  var message = e.data;
. y% p- S! w$ V0 @2 z: {  // 在这里处理接收到的消息) ?4 `2 @0 w; {1 r) F
};3 P- J# u- Q3 I- X: o& r

, d. A$ k( R! I: @" qport.postMessage('Hello from window2!');
# M$ s2 e$ W; T- v" \- I
6 }+ ~8 z% k% p+ J在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。) g7 D1 N# A/ A+ B
// shared-worker.js
' }' R8 N' R1 P$ f+ e8 ~onconnect = function(e) {
: p4 t1 q8 J/ v  var port = e.ports[0];, M$ F, W% u3 J4 s' J& j

2 v/ |6 A. a! i  port.onmessage = function(e) {
7 O$ z1 R, L* d  [* y1 A* _    var message = e.data;! Y2 ^% x9 O: p- `. a) x2 ?
    // 在这里处理接收到的消息: P1 j& v* W' U3 Y

; ]: v% \# |  C5 E5 j# \( t    // 向所有连接的窗口发送消息  i- c# K$ I- X- P& z# l2 p% a
    e.source.postMessage('Hello from SharedWorker!');+ Z% M# f2 o3 h# x
  };2 W: [+ I6 y6 u8 U$ M

* ^3 X9 r8 M: m8 f6 k, M, o; Y- T8 V  port.start();
) u5 C3 Y  p4 Q# S2 j+ z};
% U) }7 N) b/ d/ h$ ]: Q* Z4 J
, w: O, C8 n+ l' ^0 O) |  e' J. `
) B' L7 q  v7 U7 W' S6 A, a6 u( a) x2 v: L# K6 J: @: I# r' Q
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-9-26 06:38 , Processed in 1.703918 second(s), 50 queries .

回顶部