QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
" @$ |) @: d* s) K/ \% i! {& I2 N! {, L) q8 _5 J
const sendMsg = new BroadcastChannel('logout_channel')0 W5 {8 B, P. V& Z* i# H: }# p  P
sendMsg.postMessage('清除缓存')
$ e7 r# J$ Z  FonMsg.onmessage = async (event) => {
6 R' q" s+ `: M   console.log('event清除缓存', event.data)' u* J8 H+ F4 o/ T
}/ }$ J3 i; D! A. Z
" t% X, z  V$ P" |( g
二. 使用SharedWorker
# Q, s- b4 s/ U, u0 Z' j1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
/ y$ S* Z/ m) H$ |4 Q2 V. w, ~2 `% g5 \
// shared-worker.js
7 L# @. V' l8 y9 p6 Y( tonconnect = function(e) {
  ?0 s5 R: d% U5 O( m  var port = e.ports[0];4 E5 V3 i. d. Z; `5 f# n
- v5 ~5 \0 J, K. ?; b/ g  b
  port.onmessage = function(e) {- B# z3 e8 B: U6 i7 d# b5 r1 e
    var message = e.data;
2 L" ~5 @, l/ Z# n. j7 e    // 在这里处理接收到的消息
9 V( v  ~; E- M  };, Q5 y; ]: l- y5 t
6 p9 v, }. ^: Z4 ?
  port.start();1 `" @0 L8 G9 x. l9 H  I3 g' f
};
) d: C3 Z# J0 C& {
1 n& C. w8 x: S* g2 D% Z0 H# M在多个窗口中分别创建SharedWorker的端口,并发送消息。0 ]+ l/ d/ Y  {6 f5 S6 ^+ e$ T
// window1.js
5 M4 P% m+ G9 Z5 Xvar worker = new SharedWorker('shared-worker.js');
0 X8 z+ q4 M! \' P) p: Z: d. Ovar port = worker.port;
5 o: w4 M! }! h, W& }  N! V& D3 G5 V4 `
port.onmessage = function(e) {7 N2 z% C/ i7 w$ R* _( F# P
  var message = e.data;* v# B2 Q; H+ a" J5 ?7 I
  // 在这里处理接收到的消息
( p1 U0 P  D3 s# J  K/ n# y6 U};
( g. x2 \+ n  R5 \+ Q, {! C4 p  A  ?: a3 W  d8 }1 M% U. R* k; o# Y. b
port.postMessage('Hello from window1!');. r2 e) [; O* g9 A; Y( v
7 }: J* m+ Z* X8 O$ J: S, R# p
// window2.js
7 z) n+ b- ]% D# s& ]var worker = new SharedWorker('shared-worker.js');
0 b3 p8 ], r) F, F* ^) D  Avar port = worker.port;
' @, ~: e; n% F3 u: v- L# {, q0 C  I$ x/ b1 l$ J/ F! c
port.onmessage = function(e) {
6 ^4 I! r1 o) ~  G# M6 U. U1 n  var message = e.data;
# ~" F# E3 `) P7 Z; L# t7 w, a  // 在这里处理接收到的消息$ e6 B- F" P$ u. p
};1 d$ B2 q1 i0 u1 c) ~
6 t' T9 f* S! Z0 ?% u  m
port.postMessage('Hello from window2!');1 Q. d) u9 v! |" u/ f

" B  Q$ u8 n+ K/ C* Y  B在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。, u* z' ?# U$ B' q
// shared-worker.js) R2 `) v/ E+ |- b
onconnect = function(e) {. w; v  Z% \5 C' j
  var port = e.ports[0];( C5 i1 @% H) l: ^2 a5 Y7 y$ `, ^- ]
6 n: L. _2 T$ m' Q
  port.onmessage = function(e) {7 x$ y) o9 m/ n0 r% H7 Y
    var message = e.data;
' c) [5 k. P( @' E7 r* y/ K# v    // 在这里处理接收到的消息
4 X1 w6 _4 j1 a5 z
7 ~! l+ y0 A, T$ G9 x: ^    // 向所有连接的窗口发送消息
8 ^: g. l1 [! C9 I9 B5 ]    e.source.postMessage('Hello from SharedWorker!');
3 c. X3 y/ u9 Y$ r* H# ?5 e  };/ @) D4 L# J# D. R0 k3 q  P
8 L  k6 U; |% g, F# S) a1 M. n
  port.start();
  c1 l' C$ N2 s- W0 [7 B};& [9 f* w& h5 h1 r* x
8 a% S2 {5 S$ d* H( a& i' K- c$ A

0 V7 ~& [6 `2 W& F7 L" y/ \1 T% 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-28 16:22 , Processed in 0.429874 second(s), 51 queries .

回顶部