From b1c5b6e0a8a41b288cc0b37ee8d8015099cc5f0b Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Thu, 9 Jan 2025 11:33:03 +0800 Subject: [PATCH] fix: ws cleanup when page visibility change --- src/context/websocket-provider.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/context/websocket-provider.tsx b/src/context/websocket-provider.tsx index d63bd8a..948d80e 100644 --- a/src/context/websocket-provider.tsx +++ b/src/context/websocket-provider.tsx @@ -106,15 +106,29 @@ export const WebSocketProvider: React.FC = ({ url, child useEffect(() => { connect() + // 添加页面可见性变化监听 + const handleVisibilityChange = () => { + if (document.hidden) { + // 页面隐藏时断开连接 + cleanup() + } else { + // 页面可见时重新连接 + connect() + } + } + // 添加页面卸载事件监听 const handleBeforeUnload = () => { cleanup() } - window.addEventListener('beforeunload', handleBeforeUnload) + + document.addEventListener("visibilitychange", handleVisibilityChange) + window.addEventListener("beforeunload", handleBeforeUnload) return () => { cleanup() - window.removeEventListener('beforeunload', handleBeforeUnload) + document.removeEventListener("visibilitychange", handleVisibilityChange) + window.removeEventListener("beforeunload", handleBeforeUnload) } }, [url])