【问题标题】:Is it possible to share a cache between WKWebViews?是否可以在 WKWebViews 之间共享缓存?
【发布时间】:2015-07-13 22:28:42
【问题描述】:

我正在围绕WKWebView 构建一个混合iOS 应用程序。当用户点击一个链接时,请求被劫持,一个新的视图控制器被推送到导航堆栈上。新控制器创建一个新的WKWebView 并加载现有请求。这使应用程序“感觉”为原生,但内容呈现在网络上。

通过使用 Safari 调试工具,我注意到 Web 视图之间没有缓存任何资产。但是,如果我在现有 Web 视图中重新请求某些内容,所有 JavaScript 和 CSS 都会被标记为“缓存”。

那么,WKWebView 实例之间是否可以共享缓存?他们已经是sharing the same WKProcessPool to share cookies

【问题讨论】:

    标签: ios hybrid-mobile-app wkwebview


    【解决方案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 ) }
        }
    

    显然,您可以决定允许或拒绝,这只是一个示例。 WKWebView 目前不像 UIWebView 那样在标准共享 cookie 存储位置共享 cookie。这应该可以解决大多数情况下的问题。

    【讨论】:

    • 如果这满足您的问题,请标记为已回答。
    • 请在回答前阅读问题。他想在多个 wkwebview 之间共享 cookie。
    猜你喜欢
    • 2020-05-06
    • 2014-07-16
    • 2012-11-28
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多