hejianhao
2026-08-21 6e14d5a97241462002fa26f9b4f2948efe5a9d70
feat0806: 直播间用户清理缓存
2个文件已修改
145 ■■■■■ 已修改文件
traditionalApp/pages/settings/settings.vue 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/webview/webview.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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(' | '))
}
/**
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) {