2015-05-04 93 views
12

我在WKWebView附近構建了混合iOS應用程序。當用戶點擊鏈接時,請求被劫持,並且新的視圖控制器被推入導航堆棧。新的控制器創建一個新的WKWebView並加載現有的請求。這使應用程序能夠「感覺」本地化,但在網絡上呈現內容。是否可以在WKWebViews之間共享緩存?

通過使用Safari調試工具我注意到沒有資產被緩存在Web視圖之間。但是,如果我在現有Web視圖中重新請求某些內容,則所有JavaScript和CSS都會標記爲「緩存」。

那麼,是否有可能共享WKWebView實例之間的緩存?他們已經是sharing the same WKProcessPool to share cookies

回答

0

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

如果滿足您的問題,請標記爲已回答。 –

相關問題