QQ登录

只需要一步,快速开始

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

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

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

1198

主题

4

听众

2976

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
* r9 e' k% A9 _5 J6 i$ ?5 M( k6 O: y* u! @6 ]
const sendMsg = new BroadcastChannel('logout_channel'): U* i& _* S$ C5 p3 [. B1 l
sendMsg.postMessage('清除缓存')
/ l2 I6 g7 Z7 D- V  XonMsg.onmessage = async (event) => {: @2 `3 G% R5 {) v7 v: N
   console.log('event清除缓存', event.data)
2 r: q9 z' a/ l( D  N8 K}8 K/ H0 A5 x5 S/ d. P- v6 @" S

- k2 ^/ [' f/ z* {3 b8 B二. 使用SharedWorker! I$ v. P3 Z' d: Z$ `# q
1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
! G# u4 ^4 f8 o  y$ @
! ]  Z8 A( C4 [- x! Q* S8 B// shared-worker.js! {9 v- a3 n$ J) w
onconnect = function(e) {
& }  u5 x0 m$ Q, A% v2 n* z  var port = e.ports[0];# T$ d7 t2 w$ k6 l- w/ k6 k9 K$ l) ~

6 N3 h. J& h9 x& w8 B  port.onmessage = function(e) {
3 u5 g2 `' X! K& R8 _    var message = e.data;
, N. J) G$ c" m: o* m4 a/ g    // 在这里处理接收到的消息5 c' x( k# M# C" |& X
  };; A4 X6 F6 S$ _2 @9 E) i

. P/ _! y9 t1 y  port.start();
& T2 e$ J0 r; s2 s0 t};& W' y$ j0 @) O9 @# [
  b8 n  {7 \, q5 J
在多个窗口中分别创建SharedWorker的端口,并发送消息。
6 |$ {8 a# u: n// window1.js
( \, p# a* K# b2 q5 @var worker = new SharedWorker('shared-worker.js');6 K9 I% X, h9 h# X% r# |2 V
var port = worker.port;; b1 w  w5 g' J
/ j' ^  d/ d1 D; Y7 J
port.onmessage = function(e) {
2 W# g$ O  A2 N. F2 ?8 O6 O/ E- @5 }  var message = e.data;
! _2 f" o: D  k, l) s# {  // 在这里处理接收到的消息* k( A  Q  O6 z6 f! B' |" g, p9 d
};- m8 C% Z; h7 H5 r) b

) q, |0 A3 b3 J! @+ bport.postMessage('Hello from window1!');
# R) V4 V$ @7 l$ \% o; J7 q1 s" s! g& `) z
// window2.js, `  a. O) I/ z, o- q, A1 S
var worker = new SharedWorker('shared-worker.js');
' q0 i, `* ]) l- ovar port = worker.port;& p# h7 {) w, b  K, S# g

) [% Z: `' t8 qport.onmessage = function(e) {
/ S& t% }  X" \6 i9 M5 {  var message = e.data;
6 P& `+ V( _: i8 d' d) y  B  // 在这里处理接收到的消息
/ D9 c& z/ B: g* S. [4 l  v# `( L};
& v+ D  d) C$ ?
# D) p0 h- W& V; a. S3 q# Jport.postMessage('Hello from window2!');2 z8 U. ^: E: L) z! y5 V9 @

$ g) u8 M) Z: g8 r/ f- B在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。
- R2 ?$ K+ H, w9 ?6 {// shared-worker.js4 X1 x) z/ @- J! A
onconnect = function(e) {0 D/ A% i+ b4 ?6 o1 B
  var port = e.ports[0];
# v! w8 t& v/ E0 [
8 S9 s* m: c5 \  port.onmessage = function(e) {8 r) a3 e" g0 ~* C
    var message = e.data;
. k! o% ]1 S3 _6 K& J; y5 e    // 在这里处理接收到的消息
$ m9 U: [& x1 ^0 y
% V' Z0 _( e- B8 d& @& n    // 向所有连接的窗口发送消息  q. o! ^. V- Z+ E
    e.source.postMessage('Hello from SharedWorker!');' @0 O- I/ L& _8 Z5 X6 g
  };
  n; t( a$ s8 H, v" x" |' y  x+ X( F, _5 X
  port.start();
; D* a6 _* {) h) V" [};: [5 T2 r+ u. O7 x' ~1 ]
, }9 n- z; U5 o4 _

  Y, @  F" w0 `1 p# i7 q5 c/ q0 y7 ~' `4 S& C
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-12 15:59 , Processed in 1.451668 second(s), 50 queries .

回顶部