uniapp webview 缓存问题如何解决

在uniapp中使用webview组件时遇到了缓存问题,页面内容更新后webview仍然显示旧内容。尝试过修改webview的src地址添加随机参数,但效果不稳定。请问有什么方法能彻底清除webview缓存或强制刷新内容?在iOS和Android平台下是否有不同的解决方案?

2 回复

清理缓存:调用uni.clearStorageSync()清空本地存储。
设置不缓存:在webview的src后加时间戳或随机参数,如?t=Date.now()
服务端控制:设置HTTP响应头Cache-Control: no-cache


在 UniApp 中,Webview 组件默认会缓存页面内容,可能导致页面更新不及时。以下是几种解决方法:

  1. 添加时间戳或随机参数
    在 Webview 的 URL 后附加随机参数或时间戳,强制重新加载:

    let url = 'https://example.com?t=' + Date.now();
    // 或使用随机数
    // let url = 'https://example.com?r=' + Math.random();
    
  2. 禁用缓存(需服务端配合)
    服务端设置响应头:

    Cache-Control: no-cache, no-store, must-revalidate
    Pragma: no-cache
    Expires: 0
    
  3. 清除 Webview 缓存(Android)
    在 Android 平台可通过原生插件清除缓存,或使用以下代码(需在条件编译中判断平台):

    // #ifdef APP-PLUS
    let webview = this.$scope.$getAppWebview();
    webview.clearCache();
    // #endif
    
  4. 使用 plus.io 清除缓存文件
    手动删除缓存目录(谨慎使用,可能影响其他缓存):

    plus.io.resolveLocalFileSystemURL('_www', function(entry) {
      entry.removeRecursively(() => {
        console.log('缓存已清除');
      });
    });
    
  5. 动态创建 Webview
    每次打开时创建新的 Webview 实例,避免复用:

    let wv = plus.webview.create(url, 'webview', {});
    wv.show();
    

建议优先采用方法1,简单有效且不依赖平台。若问题持续,检查服务端缓存配置或结合方法3清除缓存。

回到顶部