2015-05-04 17 views
12

WKWebView etrafında karma bir iOS uygulaması yapıyorum. Kullanıcı bir bağlantıya dokunduğunda istek kaçırılır ve gezinti yığınının üzerine yeni bir görünüm denetleyicisi basılır. Yeni denetleyici yeni bir WKWebView oluşturur ve varolan isteği yükler. Bu, uygulamanın "yerel" olduğunu "hissetmesini" sağladı, ancak içeriğin web'de oluşturulmasını sağladı.WKWebViews arasında bir önbellek paylaşmak mümkün mü?

Safari hata ayıklama araçlarını kullanarak, web görünümleri arasında hiçbir öğenin önbelleğe alınmadığını fark ettim. Bununla birlikte, mevcut bir web görünümünde yeniden istekte bulunursam, tüm JavaScripts ve CSS "önbelleğe alınmış" olarak işaretlenir.

Yani, önbellek WKWebView örnekleri arasında paylaşımı mümkün mü? Onlar zaten sharing the same WKProcessPool to share cookies.

cevap

0

WKWebView'de çok fazla yakalama var. Paylaşılan bir WKProcessPool'u zaten uyguladıysanız, çerezleri el ile getirip saklamayı deneyebilirsiniz.

bu deneyin:

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

Açıkçası bu sadece bir örnek, izin vermek veya reddetmek için karar verebilir. WKWebView şu anda UIWebView'ın yaptığı gibi standart paylaşılan çerez saklama konumunda çerez paylaşmıyor. Bu çoğu durumda bunu çözmelidir.

+0

Bu, sorunuzdan memnun kaldıysa, lütfen yanıtlandı olarak işaretleyin. –