我正围绕WKWebView
构建混合iOS应用。当用户点击链接时,请求被劫持,并且在导航堆栈上推送新的视图控制器。新控制器创建一个新的WKWebView
并加载现有请求。这使应用程序能够感受到#34;原生的,但在网络上呈现内容。
通过使用Safari调试工具,我注意到Web视图之间没有缓存任何资产。但是,如果我在现有Web视图中重新请求某些内容,则所有JavaScripts和CSS都标记为" cached"。
那么,是否可以在WKWebView
实例之间共享缓存?它们已经sharing the same WKProcessPool
to share cookies。
答案 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。在大多数情况下,这应解决这个问题。