是否可以在WKWebViews之间共享缓存?

时间:2015-05-04 13:46:47

标签: ios hybrid-mobile-app wkwebview

我正围绕WKWebView构建混合iOS应用。当用户点击链接时,请求被劫持,并且在导航堆栈上推送新的视图控制器。新控制器创建一个新的WKWebView并加载现有请求。这使应用程序能够感受到#34;原生的,但在网络上呈现内容。

通过使用Safari调试工具,我注意到Web视图之间没有缓存任何资产。但是,如果我在现有Web视图中重新请求某些内容,则所有JavaScripts和CSS都标记为" cached"。

那么,是否可以在WKWebView实例之间共享缓存?它们已经sharing the same WKProcessPool to share cookies

1 个答案:

答案 0 :(得分:0)

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目前不像UIWebView那样在标准共享cookie存储位置共享cookie。在大多数情况下,这应解决这个问题。