Можно ли использовать кеш между WKWebViews? - программирование

Можно ли использовать кеш между WKWebViews?

Я создаю гибридное приложение iOS около WKWebView. Когда пользователь удаляет ссылку, запрос захватывается, а новый контроллер просмотра помещается в стек навигации. Новый контроллер создает новый WKWebView и загружает существующий запрос. Это позволило приложению "почувствовать" собственный, но иметь контент, отображаемый в Интернете.

Используя инструменты отладки Safari, я заметил, что никакие активы не кэшируются между веб-представлениями. Однако, если я повторно запрашиваю что-то в существующем веб-просмотре, все Java-скрипты и CSS помечены как "кэшированные".

Итак, можно ли делиться кешем между экземплярами WKWebView? Они уже используют один и тот же WKProcessPool для совместного использования файлов cookie.

4b9b3361

Ответ 1

WKWebView много догоняет. Если вы уже внедрили общий WKProcessPool, вы можете попробовать вручную выбрать и сохранить файлы cookie.

Попробуйте следующее:

    func webView( _ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void )
    {
        assert( self.webView == webView )
        decisionHandler( .allow )
        guard let httpResponse = navigationResponse.response as? HTTPURLResponse else { return }
        guard let url = httpResponse.url else { return }
        let cookies = HTTPCookie.cookies( withResponseHeaderFields: httpResponse.allHeaderFields as! [String : String], for: url )
        let _ = cookies.map{ HTTPCookieStorage.shared.setCookie( $0 ) }
    }

Очевидно, вы можете решить разрешить или отклонить, это просто пример. WKWebView в настоящее время не передает файлы cookie в стандартном хранилище общих файлов cookie, как это делает UIWebView. Это должно разрешить это для большинства случаев.