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

是否可以在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。这应该可以解决大多数情况。

+0

如果满足您的问题,请标记为已回答。 –