Joe*_*tti 12 ios hybrid-mobile-app wkwebview
我正在构建一个混合iOS应用程序WKWebView.当用户点击链接时,请求被劫持,并且在导航堆栈上推送新的视图控制器.新控制器创建一个新的WKWebView并加载现有请求.这使应用程序"感觉"原生,但在网络上呈现内容.
通过使用Safari调试工具,我注意到Web视图之间没有缓存任何资产.但是,如果我在现有Web视图中重新请求某些内容,则所有JavaScripts和CSS都会标记为"缓存".
那么,是否可以在WKWebView实例之间共享缓存?他们已经共享相同WKProcessPool的共享cookie.
小智 -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 ) }
}
Run Code Online (Sandbox Code Playgroud)
显然你可以决定允许或拒绝,这只是一个例子。WKWebView 目前并不像 UIWebView 那样在标准共享 cookie 存储位置中共享 cookie。对于大多数情况,这应该可以解决这个问题。