QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
: I; O. |- b& M! E8 b4 Z1 m. \5 `$ l& v& g7 X3 p
const sendMsg = new BroadcastChannel('logout_channel')% i: \6 C( \0 H5 |
sendMsg.postMessage('清除缓存')9 w7 V9 d: S* y! z: Z# S" j( ~' `
onMsg.onmessage = async (event) => {: C" s8 s% H! E9 Q
   console.log('event清除缓存', event.data)
* v. w* b" |! _}5 C/ \$ m2 }6 r6 c- v/ O1 b

% R) W- F! ], I  H二. 使用SharedWorker
( X( q/ v+ R. E  y# f( t, E, \1.创建一个SharedWorker实例,并在其中编写处理消息的代码。, I' r. L5 |5 J
3 K) C" u" S7 Q, v
// shared-worker.js; E2 {9 G! I# a  B1 I7 g5 r
onconnect = function(e) {0 z5 Q+ K7 h. s" w. X; `- F* d
  var port = e.ports[0];
( E7 w" w, I# q" K, n! _* K1 @# q/ X* K# b3 z2 B& ]
  port.onmessage = function(e) {. a1 R& O, E  @8 \% ^  g7 U4 M
    var message = e.data;
0 x* s0 H1 w& C  K' Y$ @# G    // 在这里处理接收到的消息
+ e/ X* d: S! y3 T: Z- R0 T1 J3 Y/ A% Q  };
9 V7 |  V2 \5 m, Y: X' Y( O2 b. |4 g' ?1 j* n! p
  port.start();$ I' u& J( B  {0 i
};* F% g: C9 d. A. ~$ G; n" m
/ N; S/ u+ y# H5 ^7 ?
在多个窗口中分别创建SharedWorker的端口,并发送消息。
* r; g  |. P+ S) i/ I% N$ N// window1.js5 z$ J  u/ }0 b/ }+ {. s) y$ d) y
var worker = new SharedWorker('shared-worker.js');& }, t% b8 E/ v! Q5 d! u- y. N
var port = worker.port;
- u8 P) r9 e- z
  K: `4 `) U1 g/ oport.onmessage = function(e) {
$ y# e/ l  \% U% \( V& V  var message = e.data;
7 X2 D; j' Z3 `2 X. |+ a: L  // 在这里处理接收到的消息
- k/ o3 T" d8 @; B, _' A+ i1 h};
! Z0 A. x3 q3 J: L1 B, G  \2 i  s% E; Y4 H6 b& v5 a
port.postMessage('Hello from window1!');' J* Q9 ^/ W9 R+ u( @( m

* G6 U) n+ V) |1 v. a7 K+ _. [9 d// window2.js! _; C5 x+ \1 |, |, T: O1 D
var worker = new SharedWorker('shared-worker.js');
$ {' n9 Y7 q/ e0 b8 T& x) N% ^var port = worker.port;
& x! r/ y/ q& X7 O1 `8 S  X" \* f/ t5 o
port.onmessage = function(e) {
- G) P2 @) A$ J' M9 c( P2 [: [  var message = e.data;  d8 U/ J' [- [  t
  // 在这里处理接收到的消息+ _3 q3 w( \' Z3 n. p& |) G" W
};5 \$ |" X5 x# n: }; X% |

% i; O3 m  x" a6 {port.postMessage('Hello from window2!');
6 j$ @. ?# }5 P, j! x* r1 f/ T9 {! w( m1 E4 ]: e$ d/ k) ]5 a
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
! t6 q/ ?: T3 B  z$ a5 N) ~& c// shared-worker.js$ m3 a( D! ]% B+ U5 |" I2 z' P
onconnect = function(e) {
- T# N0 I$ x' b; H! R9 K8 R  var port = e.ports[0];* Y+ i6 B9 r0 q* q3 {

# ?; f5 S& S" _, I' Z* B  port.onmessage = function(e) {# \6 a# H! T( \9 ?
    var message = e.data;8 V0 E3 s9 v8 Z/ r! {
    // 在这里处理接收到的消息
, ?. p# s4 G4 X  p, H7 t8 y- Q$ {# `8 q5 K* V9 N& x) l6 V; W, F
    // 向所有连接的窗口发送消息
( V: A: ?, }  \$ r% c  p2 X9 N    e.source.postMessage('Hello from SharedWorker!');
, u( ~# o- n, O0 W  };' y* K/ `- a2 S) m8 G! i7 [
: {" G9 M' A! U$ }
  port.start();2 J4 x. c, y, F- x; E- N
};
2 t  Z: g9 }# U( B
2 B7 J: d: }  a( w# j9 N, X) ?! y
$ ^, g% L3 A* \4 R" b4 ~
3 I1 ^( P& H8 W/ K9 v
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-13 09:02 , Processed in 0.418671 second(s), 51 queries .

回顶部