有没有办法预先缓存网页以使用 Android WebView 查看?

Posted

技术标签:

【中文标题】有没有办法预先缓存网页以使用 Android WebView 查看?【英文标题】:Is there a way to pre-cache a web page for viewing with an Android WebView? 【发布时间】:2011-11-29 09:44:54 【问题描述】:

我已经阅读了有关 html5 缓存清单的信息,并且我看到 android 确实支持使用缓存清单来缓存网站。我想使用缓存清单下载我的网站所需的所有资源以预加载它,然后打开一个 WebView 并使用预缓存的资源显示远程网站。我想以某种方式预先缓存我的远程页面,最好不使用 WebView 进行缓存。

使用 WebView 进行预缓存过程的问题在于,使用 WebView 加载网页会呈现并执行页面,而不是仅仅下载它。

我读过这篇文章:http://alex.tapmania.org/2010/11/html5-cache-android-webview.html,但是拥有 WebView 支持缓存并不是我想要的。我希望在完成预缓存资源后立即加载过程(假设远程网站的缓存清单 / etags 与缓存版本相同),而不是等待 WebView 加载并缓存所有内容第一次访问。

预缓存网页以供以后查看的正确方法是什么?

谢谢!

【问题讨论】:

【参考方案1】:

您想要做的事情需要为使用数据库 API 的 HTML5 应用程序实现应用程序缓存、链接资源、cookie 和本地数据库存储机制,这是当今浏览器所做工作的重要组成部分。我不建议您自己进行缓存,不仅因为它的工作量很大,而且因为我不记得WebView 中的任何方法以及接受外部缓存的朋友(WebViewClient 等)。

但是您的问题有一个非常简单的解决方案:您可以在视图中放置一个WebView,并将其visibility 设置为gone。然后在页面加载完成后使其可见。 WebView 还会自动为您的应用保留缓存,以便下次运行时更快地加载页面。

要隐藏您的WebView,然后自动显示它,您只需覆盖WebViewClient 中的onPageFinished

【讨论】:

以上是关于有没有办法预先缓存网页以使用 Android WebView 查看?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法以编程方式清除所有缓存文件?

即使在离线时如何缓存网页以在我的 android 应用程序中使用

AVURLAsset的缓存行为

有没有办法缓存 https 凭据以推送提交?

限制 Android 中的应用程序缓存大小

网页缓存数据馈送