我正在尝试为WKWebView实现HTTP缓存,其行为应如下所示:
首先,我使用类似此答案https://stackoverflow.com/a/55909771/356105中的代码来缓存数据并检查数据是否已缓存。我认为这与WKWebView一起使用不是必需的,但是我找不到更好的解决方案来检查缓存的数据。
然后,我尝试使用https://github.com/ashleymills/Reachability.swift来检查网络连接是否完全可用,然后再尝试执行Web视图加载请求。如果没有可用的网络连接,但是使用downloadContent()
找到了缓存的数据,则在更改cachePolicy后我正在尝试加载Web视图:
var request = request
request.cachePolicy = .returnCacheDataDontLoad
_webView.load(request)
如果没有网络,也没有缓存的数据,我想显示我的后备视图:
private func onWebViewNavigationFailed(navigation: WKNavigation!, error: Error)
{
if !_isNetworkReachable && !_hasChachedData
{
showEmptyResultView()
}
}
但是整个结构运行不可靠。对于某些网页,它起作用,而对某些网页则无效。在Webview加载缓存数据的一半时间(_hasChachedData = true
)中缓存数据时,其他时间根本没有...
所以我的问题是:用WKWebView
实现缓存的正确方法是什么?如何检查WKWebView
是否已缓存了可用于特定请求的数据?进行了大量猜测工作,因为为此我无法在网络上找到合适的解决方案。
简要介绍如何正确实施此要求非常有用。