WebView缓存不生效,页面总是重新加载怎么办? 燕燕酱~ 提问于 2026-03-11 14:57:20 阅读 97 移动 我在做Hybrid App时,用WebView加载H5页面,明明设置了缓存策略,但每次打开都重新请求资源,根本没走缓存,特别慢。 我试过在Android里设置webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);,也确认服务器返回了Cache-Control头,但还是不行。是不是哪里漏了? Hybrid开发 我来解答 赞 6 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 码农柯豪 Lv1 这个问题很常见,主要是你可能漏了几个关键配置,光设CacheMode不够。 Android WebView要完整启用缓存,得同时设置这么几个东西: WebSettings webSettings = webView.getSettings(); // 1. 启用缓存 webSettings.setAppCacheEnabled(true); webSettings.setDatabaseEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); // 2. 设置缓存路径和大小(重要!) webSettings.setAppCachePath(context.getCacheDir().getAbsolutePath()); webSettings.setAppCacheMaxBytes(10 * 1024 * 1024); // 10MB // 3. 允许H5使用本地存储 webSettings.setDomStorageEnabled(true); webSettings.setDatabaseEnabled(true); 另外检查一下你的H5页面请求URL,看看是不是脑子抽风在后面加了时间戳或者随机数,比如 xxx.js?t=123456 或者 xxx.js?_=xxx,这样每次请求URL都变了,缓存当然不生效。 如果你是做离线包或者资源预加载那种,得手动把资源存到本地,然后用file://协议加载: // 加载本地文件 webView.loadUrl("file:///android_asset/index.html"); // 或者加载本地HTML webView.loadDataWithBaseURL("file:///android_asset/", htmlContent, "text/html", "UTF-8", null); 还有一种情况是服务端返回的Cache-Control可能没设对,确认一下是不是 max-age 太小了,或者用了 no-store,那玩意儿是禁止缓存的。 这几个地方都检查一下,基本就能解决。 回复 点赞 2026-03-11 15:10 加载更多 相关推荐 2 回答 52 浏览 Hybrid页面清除WebView缓存后还是加载旧内容怎么办? 在Hybrid项目里用Android WebView开发,修改了接口后发现页面还是显示旧数据。已经调用了clearCache()和清除Cookie的方法,但问题依旧存在。 具体场景是用户登录页,前端改... ❤珍珍 移动 2026-02-05 13:52:31 1 回答 32 浏览 WebView里加载的网页样式错乱,是不是安全策略导致的? 我在App的WebView里加载了一个本地HTML页面,结果CSS样式完全没生效,布局全乱了。明明在浏览器里打开是正常的,难道是WebView的安全限制把样式给拦截了? 我试过加file://协议访问... 羽墨 ☘︎ 移动 2026-03-22 11:24:17 2 回答 84 浏览 Android WebView中H5页面无法触发JavaScript的alert弹窗怎么办? 各位大佬帮忙看看啊,我在Android WebView里加载H5页面,点击按钮后本该弹出alert提示框,结果完全没反应。已经检查过JavaScript是启用的,连console.log都能打出来,就... Zz楠楠 移动 2026-02-12 09:06:42 2 回答 47 浏览 Espresso怎么测试带WebView的页面? 我用Espresso写自动化测试,但页面里有个WebView加载了H5内容,点击里面的按钮完全没反应。查了文档说要用WebViewInteraction,但我加上去还是报错找不到元素,是不是还要额外配... 丽珍 移动 2026-03-24 08:30:20 1 回答 42 浏览 Hybrid App里怎么监控WebView页面的性能? 我们用的是Vue + Cordova做Hybrid开发,现在想监控WebView里H5页面的加载性能,比如首屏时间、JS错误这些。但发现传统的Web性能监控工具(比如埋点打log)在App里根本拿不到... 极客锡丹 移动 2026-03-14 21:06:23 1 回答 46 浏览 Hybrid App里怎么监控WebView页面的性能? 我们用的是 Cordova + Vue 的混合开发方案,现在想监控 WebView 里 H5 页面的加载性能,比如首屏时间、JS 执行耗时这些。但试了下 performance.timing 在部分安... 令狐煜喆 移动 2026-03-04 08:36:25 1 回答 55 浏览 Webpack缓存没生效,页面还是重新加载了? 我用 Webpack 搭了个 React 项目,明明配置了 cache 缓存,但每次改点代码,整个页面都重新加载,连组件状态都没保住,是不是哪里配错了? 我试过在 webpack.config.js ... 开发者亚会 工具 2026-03-03 21:00:21 1 回答 76 浏览 Hybrid开发中如何拦截WebView加载的外部资源? 在做Hybrid开发时,WebView加载H5页面会自动请求外部CDN的图片和CSS,怎么拦截这些资源请求呢?我试过用shouldInterceptRequest拦截特定域名,但发现内联base64图... 荣荣酱~ 移动 2026-02-10 13:05:28 2 回答 56 浏览 Hybrid应用WebView页面滑动卡顿怎么办? 最近在做Hybrid混合开发,安卓机上WebView页面滑动特别卡顿。已经尝试过压缩图片资源、合并CSS文件,但效果不明显。发现滑动时频繁触发requestAnimationFrame,控制台还报过G... 程序员家乐 移动 2026-01-29 18:37:27 1 回答 51 浏览 WebView加载本地HTML时如何防止XSS攻击? 我在React Native里用WebView加载本地的HTML文件,但担心用户输入的内容被注入脚本。比如我从接口拿到一段富文本,直接塞进HTML里展示,会不会有安全风险? 试过用DOMPurify清... 轩辕梦媛 移动 2026-03-20 13:40:25
Android WebView要完整启用缓存,得同时设置这么几个东西:
另外检查一下你的H5页面请求URL,看看是不是脑子抽风在后面加了时间戳或者随机数,比如
xxx.js?t=123456或者xxx.js?_=xxx,这样每次请求URL都变了,缓存当然不生效。如果你是做离线包或者资源预加载那种,得手动把资源存到本地,然后用file://协议加载:
还有一种情况是服务端返回的Cache-Control可能没设对,确认一下是不是
max-age太小了,或者用了no-store,那玩意儿是禁止缓存的。这几个地方都检查一下,基本就能解决。