2015-05-04 22 views
12

Sto costruendo un'app ibrida per iOS intorno a WKWebView. Quando l'utente tocca un collegamento, la richiesta viene dirottata e un nuovo controller di visualizzazione viene inserito nella pila di navigazione. Il nuovo controller crea un nuovo WKWebView e carica la richiesta esistente. Ciò ha permesso all'app di "sentire" nativo, ma il contenuto è stato reso sul web.È possibile condividere una cache tra WKWebViews?

Utilizzando gli strumenti di debug di Safari, ho notato che nessuna risorsa viene memorizzata nella cache tra le visualizzazioni Web. Tuttavia, se richiudo nuovamente qualcosa in una visualizzazione Web esistente, tutti i JavaScript e i CSS sono contrassegnati come "memorizzati nella cache".

Quindi, è possibile condividere la cache tra istanze WKWebView? Sono già sharing the same WKProcessPool to share cookies.

risposta

0

WKWebView ha un sacco di recupero. Se hai già implementato un WKProcessPool condiviso, puoi provare a recuperare e memorizzare manualmente i cookie.

Prova questa:

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) } 
    } 

Ovviamente si può decidere di consentire o rifiutare, questo è solo un esempio. WKWebView non condivide attualmente i cookie nella posizione di archiviazione dei cookie condivisa standard come fa UIWebView. Questo dovrebbe risolverlo per la maggior parte dei casi.

+0

Se la domanda è stata soddisfatta, contrassegnare come risposta. –

Problemi correlati