2015-05-04 25 views
12

Tôi đang xây dựng một ứng dụng iOS lai quanh WKWebView. Khi người dùng chạm vào một liên kết, yêu cầu bị chiếm đoạt và một bộ điều khiển chế độ xem mới sẽ được đẩy lên ngăn điều hướng. Bộ điều khiển mới tạo WKWebView mới và tải yêu cầu hiện tại. Điều này cho phép ứng dụng "cảm thấy" bản địa nhưng có nội dung được hiển thị trên web.Có thể chia sẻ bộ nhớ cache giữa WKWebView không?

Bằng cách sử dụng các công cụ gỡ lỗi Safari tôi đã nhận thấy rằng không có nội dung nào được lưu trong bộ nhớ cache giữa các lần xem web. Tuy nhiên, nếu tôi yêu cầu lại một cái gì đó trong một chế độ xem web hiện tại, tất cả các JavaScripts và CSS được đánh dấu là "được lưu trong bộ nhớ cache".

Vì vậy, có thể chia sẻ bộ nhớ cache giữa WKWebView trường hợp không? Chúng đã là sharing the same WKProcessPool to share cookies.

Trả lời

0

WKWebView có nhiều khả năng bắt kịp. Nếu bạn đã triển khai WKProcessPool được chia sẻ, bạn có thể thử tìm nạp và lưu trữ cookie theo cách thủ công.

Hãy thử điều này:

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

Rõ ràng, bạn có thể quyết định để cho phép hoặc từ chối, đó chỉ là một ví dụ. WKWebView hiện không chia sẻ cookie ở vị trí lưu trữ cookie được chia sẻ chuẩn như UIWebView. Điều này sẽ giải quyết cho hầu hết các trường hợp.

+0

Nếu điều này thỏa mãn câu hỏi của bạn, vui lòng đánh dấu là đã trả lời. –

Các vấn đề liên quan