From 6e14d5a97241462002fa26f9b4f2948efe5a9d70 Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期五, 21 八月 2026 09:34:52 +0800
Subject: [PATCH] feat0806: 直播间用户清理缓存

---
 traditionalApp/pages/webview/webview.vue   |   64 +++++++++++++++++++++
 traditionalApp/pages/settings/settings.vue |   81 +++++++++++++++++++++++---
 2 files changed, 134 insertions(+), 11 deletions(-)

diff --git a/traditionalApp/pages/settings/settings.vue b/traditionalApp/pages/settings/settings.vue
index b43ba90..2f08a09 100644
--- a/traditionalApp/pages/settings/settings.vue
+++ b/traditionalApp/pages/settings/settings.vue
@@ -295,40 +295,101 @@
  */
 function clearWebViewCache() {
 	console.log('[clearWebViewCache] 函数被调用')
+
+	let logMessages = []
+	logMessages.push('开始清除缓存')
+
 	try {
+		// 清除 uni.storage(所有环境通用)
+		try {
+			uni.clearStorageSync()
+			console.log('[clearWebViewCache] uni.storage 已清除')
+			logMessages.push('uni.storage 已清除')
+		} catch (e) {
+			console.error('[clearWebViewCache] 清除 uni.storage 失败:', e)
+			logMessages.push('uni.storage 清除失败')
+		}
+
 		// #ifdef APP-PLUS
 		console.log('[clearWebViewCache] APP-PLUS 环境,开始清除 WebView 缓存')
+		logMessages.push('APP-PLUS 环境检测到')
 
-		// 清除 localStorage
+		// 清除 plus.storage
 		if (plus.storage) {
 			plus.storage.clear()
-			console.log('[clearWebViewCache] localStorage 已清除')
+			console.log('[clearWebViewCache] plus.storage 已清除')
+			logMessages.push('plus.storage 已清除')
 		}
 
 		// 清除 WebView 缓存
 		const currentWebview = plus.webview.currentWebview()
 		if (currentWebview && typeof currentWebview.clearCache === 'function') {
 			currentWebview.clearCache()
-			console.log('[clearWebViewCache] WebView 缓存已清除')
+			console.log('[clearWebViewCache] 当前 WebView 缓存已清除')
+			logMessages.push('当前 WebView 缓存已清除')
 		}
 
 		// 清除所有 WebView 的缓存
 		const allWebviews = plus.webview.all()
-		allWebviews.forEach((webview) => {
-			if (webview && typeof webview.clearCache === 'function') {
-				webview.clearCache()
-			}
-		})
-		console.log('[clearWebViewCache] 所有 WebView 缓存已清除')
+		if (allWebviews && allWebviews.length > 0) {
+			allWebviews.forEach((webview) => {
+				try {
+					// 清除缓存
+					if (webview && typeof webview.clearCache === 'function') {
+						webview.clearCache()
+					}
 
+					// 清除 Cookie 和存储
+					if (webview && typeof webview.evalJS === 'function') {
+						webview.evalJS(`
+							try {
+								// 清除所有 Cookie
+								document.cookie.split(";").forEach(function(c) {
+									document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/");
+								});
+								// 清除存储
+								if (window.localStorage) localStorage.clear();
+								if (window.sessionStorage) sessionStorage.clear();
+								console.log('[WebView.evalJS] Cookie 和存储已清除');
+							} catch (e) {
+								console.error('[WebView.evalJS] 清除失败:', e);
+							}
+						`)
+					}
+				} catch (e) {
+					console.error('[clearWebViewCache] 处理 WebView 失败:', e)
+				}
+			})
+			console.log('[clearWebViewCache] 所有 WebView 缓存和 Cookie 已清除,共 ' + allWebviews.length + ' 个')
+			logMessages.push(`所有 WebView 已清除 (${allWebviews.length}个)`)
+		}
 		// #endif
 
 		// #ifndef APP-PLUS
-		console.log('[clearWebViewCache] 非 APP-PLUS 环境,跳过清除')
+		console.log('[clearWebViewCache] 非 APP-PLUS 环境,已清除 uni.storage')
+		logMessages.push('非 APP-PLUS 环境')
 		// #endif
+
+		// 显示清除结果
+		uni.showToast({
+			title: '缓存已清除',
+			icon: 'success',
+			duration: 2000
+		})
+
 	} catch (error) {
 		console.error('[clearWebViewCache] 清除缓存失败:', error)
+		logMessages.push('异常: ' + error.message)
+
+		uni.showToast({
+			title: '缓存清除失败',
+			icon: 'none',
+			duration: 2000
+		})
 	}
+
+	// 开发调试:显示详细日志
+	console.log('[clearWebViewCache] 执行完成,日志:', logMessages.join(' | '))
 }
 
 /**
diff --git a/traditionalApp/pages/webview/webview.vue b/traditionalApp/pages/webview/webview.vue
index 2b6aa91..f12bf32 100644
--- a/traditionalApp/pages/webview/webview.vue
+++ b/traditionalApp/pages/webview/webview.vue
@@ -9,9 +9,10 @@
 
 <script setup lang="ts">
 import { ref } from 'vue'
-import { onLoad } from '@dcloudio/uni-app'
+import { onLoad, onUnload } from '@dcloudio/uni-app'
 
 const webViewUrl = ref('')
+let currentWebviewInstance: any = null
 
 /**
  * 页面加载时读取外链地址与标题。
@@ -25,9 +26,70 @@
 			title: resolvedTitle,
 		})
 	}
+
+	// #ifdef APP-PLUS
+	// 获取当前 WebView 实例
+	setTimeout(() => {
+		currentWebviewInstance = plus.webview.currentWebview()
+		console.log('[WebView] 页面加载完成,URL:', resolvedUrl)
+	}, 100)
+	// #endif
 })
 
 /**
+ * 页面卸载时清除 WebView 缓存和 Cookie
+ */
+onUnload(() => {
+	console.log('[WebView] 页面卸载,开始清除缓存')
+	clearWebViewData()
+})
+
+/**
+ * 清除 WebView 的缓存、Cookie 和存储数据
+ */
+function clearWebViewData() {
+	try {
+		// #ifdef APP-PLUS
+		if (currentWebviewInstance) {
+			// 清除 WebView 缓存
+			if (typeof currentWebviewInstance.clearCache === 'function') {
+				currentWebviewInstance.clearCache()
+				console.log('[WebView] 缓存已清除')
+			}
+
+			// 清除 Cookie
+			if (typeof currentWebviewInstance.evalJS === 'function') {
+				// 通过 JS 清除 Cookie
+				currentWebviewInstance.evalJS(`
+					document.cookie.split(";").forEach(function(c) {
+						document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/");
+					});
+					// 清除 localStorage 和 sessionStorage
+					if (window.localStorage) localStorage.clear();
+					if (window.sessionStorage) sessionStorage.clear();
+					console.log('[WebView.evalJS] Cookie 和存储已清除');
+				`)
+				console.log('[WebView] Cookie 和存储已清除')
+			}
+		}
+
+		// 清除所有 WebView 的缓存
+		const allWebviews = plus.webview.all()
+		if (allWebviews && allWebviews.length > 0) {
+			allWebviews.forEach((webview) => {
+				if (webview && typeof webview.clearCache === 'function') {
+					webview.clearCache()
+				}
+			})
+			console.log('[WebView] 所有 WebView 缓存已清除')
+		}
+		// #endif
+	} catch (error) {
+		console.error('[WebView] 清除数据失败:', error)
+	}
+}
+
+/**
  * 解码路由参数,异常时回退为空字符串。
  */
 function decodeQueryValue(value: unknown) {

--
Gitblit v1.7.1