如何检查WKWebView是否已缓存数据可用?

时间:2019-10-09 02:31:36

标签: ios swift http caching wkwebview

我正在尝试为WKWebView实现HTTP缓存,其行为应如下所示:

  • 可用网络:从网络中获取Web数据并将其缓存。
  • 网络不可用并且已缓存数据:加载缓存的数据。
  • 网络不可用,并且没有缓存的数据:显示后备错误视图。

首先,我使用类似此答案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是否已缓存了可用于特定请求的数据?进行了大量猜测工作,因为为此我无法在网络上找到合适的解决方案。

简要介绍如何正确实施此要求非常有用。

0 个答案:

没有答案