是否可以在WKWebViews之间共享缓存?
问题描述:
我在WKWebView
附近构建了混合iOS应用程序。当用户点击链接时,请求被劫持,并且新的视图控制器被推入导航堆栈。新的控制器创建一个新的WKWebView
并加载现有的请求。这使应用程序能够“感觉”本地化,但在网络上呈现内容。是否可以在WKWebViews之间共享缓存?
通过使用Safari调试工具我注意到没有资产被缓存在Web视图之间。但是,如果我在现有Web视图中重新请求某些内容,则所有JavaScript和CSS都会标记为“缓存”。
那么,是否有可能共享WKWebView
实例之间的缓存?他们已经是sharing the same WKProcessPool
to share cookies。
答
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。这应该可以解决大多数情况。
如果满足您的问题,请标记为已回答。 –