Как проверить, есть ли в WKWebView кэшированные данные? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь реализовать HTTP-кэширование для WKWebView, который должен вести себя следующим образом:

  • Доступная сеть: извлекать веб-данные из сети и кэшировать их.
  • Сеть недоступна иимеет кэшированные данные: загрузите кэшированные данные.
  • Сеть недоступна и не имеет кэшированных данных: Показать представление об ошибке возврата.

Сначала я использую подобный код, как в этомОтветьте https://stackoverflow.com/a/55909771/356105, чтобы кэшировать данные и проверить, были ли данные кэшированы. я не думаю, что это необходимо для использования с WKWebView, но я не смог найти лучшего решения для проверки кэшированных данных.

Затем я использую https://github.com/ashleymills/Reachability.swift, чтобы проверить, работает ли сетьСоединение доступно вообще, прежде чем пытаться запросить загрузку веб-просмотра. Если нет сетевого подключения, но есть кэшированные данные, найденные с помощью downloadContent() Я пытаюсь загрузить веб-представление после изменения cachePolicy:

    var request = request
    request.cachePolicy = .returnCacheDataDontLoad
    _webView.load(request)

Если нет сети и нет кэшированных данных, яхочу показать мой запасной вариант:

private func onWebViewNavigationFailed(navigation: WKNavigation!, error: Error)
{
    if !_isNetworkReachable && !_hasChachedData
    {
        showEmptyResultView()
    }
}

Но вся эта конструкция работает ненадежно. С некоторыми веб-страницами это работает, с некоторыми нет. Когда он кэширует данные (_hasChachedData = true) половину времени, когда веб-просмотр загружает кэшированные данные, в других случаях совсем нет ...

Поэтому мой вопрос: как правильно реализовать кэширование с WKWebView и как я могу проверить, есть ли в WKWebView кэшированные данные для определенного запроса? Было проделано много догадок, потому что я не могу найти в Интернете ни одного подходящего решения для этого.

Краткое изложение того, как правильно выполнить это требование, было бы очень полезно.

...