QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-29 17:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
一. 使用BroadcastChannel
4 f+ J+ d8 C9 ]7 B  o$ @. t
7 I# D0 ?1 f" z$ |  v1 Uconst sendMsg = new BroadcastChannel('logout_channel')% L/ G# a( `7 E) Q6 }- }: A2 G8 S
sendMsg.postMessage('清除缓存')
* n; t8 I/ U6 x) aonMsg.onmessage = async (event) => {' k) k* l9 K$ m( g# [+ f
   console.log('event清除缓存', event.data)
# V2 E. L" D1 c; s}
7 D8 E' i) x  r, [3 O. ?% b
6 |& S. G' E* K1 \2 d1 Y' a二. 使用SharedWorker
' N( _4 t6 ~) x; k) R% Y1.创建一个SharedWorker实例,并在其中编写处理消息的代码。
0 e% S+ T7 w: T, M( g; m: M
6 r2 ^% L) ], F2 j// shared-worker.js; m* k: P$ p; K4 J' V! W) S1 f) [
onconnect = function(e) {
' S. y  L4 l9 V: {$ q* T  var port = e.ports[0];
7 U6 g1 }" x# M, c% u# C: U" V/ W% v: `6 M
  port.onmessage = function(e) {! g3 Z8 I1 ?2 a: d+ @% q
    var message = e.data;
3 K" O+ W" ]/ u7 j+ I# E    // 在这里处理接收到的消息% k8 u# b1 C, O4 _$ w2 N0 h
  };6 j( x0 S3 P9 a
! |: O4 t$ l6 P8 w3 M1 x' b5 C
  port.start();: N. ~, @2 N2 s# N0 u5 J
};; J2 p9 T% |0 c* q6 u

: A) `4 L- U' n% f在多个窗口中分别创建SharedWorker的端口,并发送消息。
1 }/ i# g7 _. v# Z$ Y+ Y% S// window1.js
6 J( R+ Q7 T- H! k: p, O( A: uvar worker = new SharedWorker('shared-worker.js');9 x) ]5 y5 H/ n3 ]. U  ^5 c
var port = worker.port;
% Y$ N  A2 u- ^* b
% H2 r9 }1 d. x# b8 c$ sport.onmessage = function(e) {: J# J: {$ q) i; ]6 Y4 n% w
  var message = e.data;
* H$ J2 w) s' p# |4 H! \8 J% o  // 在这里处理接收到的消息
& C2 z" ~" K+ Q};& u1 w6 X9 S6 A4 G' R3 a( t
6 k7 B! n3 Y0 \, t
port.postMessage('Hello from window1!');( m  V: W' Z! {, U

9 @, D! S4 f" @5 K. d& [// window2.js
/ @* F5 V- b1 A* S& {; Avar worker = new SharedWorker('shared-worker.js');
" k0 G1 P8 W; T) F1 z' J3 [var port = worker.port;
/ h, k# w4 ^4 q% i! R. q# H
; k5 {8 }% H* S) ?port.onmessage = function(e) {
! p( Z* s/ j* X  var message = e.data;) M6 d  w5 @7 X+ g  E
  // 在这里处理接收到的消息
4 |: q" l( r0 U/ h) C};
5 h$ F" R+ M) |& l
4 k1 p* j( \7 a. A1 U1 q1 iport.postMessage('Hello from window2!');
+ S% b- L; {( l5 B% F$ q5 \$ [3 u; V* t3 Z4 p0 m! H( c9 |; G- B
在SharedWorker中处理接收到的消息,并向所有连接的窗口发送消息。7 w3 @! E! ~/ h
// shared-worker.js
: A! G0 L( V3 t4 Monconnect = function(e) {
8 A! H1 g4 u9 u. X  var port = e.ports[0];! w% H% d% A6 T+ G4 S
9 T) B) b0 e3 S+ ~/ [7 C0 ?7 h
  port.onmessage = function(e) {
3 z6 Y# ?% Y# z    var message = e.data;, q8 X! S2 ~. p- @0 S( \& S% [
    // 在这里处理接收到的消息- _6 X" T1 u, x6 I

$ w0 {) T4 l, p' ^( i    // 向所有连接的窗口发送消息+ ~1 G# `3 s$ x" b0 o1 w2 o- K
    e.source.postMessage('Hello from SharedWorker!');
$ B* I, j/ d9 t0 S: p  };2 @! F6 G: W$ d/ P6 q

% W; p* J+ h" J+ N$ }( F7 [1 P* L  port.start();8 ~0 @6 z; c3 L. }! U
};
# A% p/ a3 n2 {, J2 t* T& b
! D1 f9 q2 @- ^6 U1 h, s* Q: Z2 O. e  v2 n8 n; b# x

+ Y! G5 p. Y& q/ H' I, {0 Z7 f6 {
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-14 18:28 , Processed in 0.285441 second(s), 51 queries .

回顶部