问题 WKWebView的缓存


我的自定义互联网浏览器出了问题。我正在使用WKWebView。我的应用程序中有标签。如果我单击选项卡,则在WKWebView中加载新的NSURLRequest。我需要实现一个缓存。如果用户按下选项卡,我宁愿加载缓存数据而不是新数据。不幸的是这段代码不起作用:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:0.0];
[self.webView loadRequest:request];

你能指导我如何为WKWebView实现缓存吗?


9568
2018-06-16 10:22


起源



答案:


如果你用过 NSURLRequestUseProtocolCachePolicy,这是默认设置,您不需要做任何其他事情。此策略将自动查看服务器的响应,以确定它是否应该实际再次获取数据。

如果服务器使用Cache-Control HTTP标头并设置其响应的最大年龄,NSURLSession将尊重此并在过期之前返回缓存的响应。


8
2018-06-25 23:26





如果我有互联网连接,我通常会从服务器加载。否则,我从缓存加载。

 if reachability.isReachable {
             urlRequestCache=NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 10)
        }
        else {
            urlRequestCache = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReturnCacheDataElseLoad, timeoutInterval: 60)
        }
       theWebView.loadRequest(urlRequestCache)

3
2018-01-28 09:04



这不适用于WKWebView,如此处所述, forums.developer.apple.com/thread/53573。 - guoc
@guoc - 我在一年之前自己尝试过,它在wkwebview中运行良好 - Durai Amuthan.H


答案:


如果你用过 NSURLRequestUseProtocolCachePolicy,这是默认设置,您不需要做任何其他事情。此策略将自动查看服务器的响应,以确定它是否应该实际再次获取数据。

如果服务器使用Cache-Control HTTP标头并设置其响应的最大年龄,NSURLSession将尊重此并在过期之前返回缓存的响应。


8
2018-06-25 23:26





如果我有互联网连接,我通常会从服务器加载。否则,我从缓存加载。

 if reachability.isReachable {
             urlRequestCache=NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 10)
        }
        else {
            urlRequestCache = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReturnCacheDataElseLoad, timeoutInterval: 60)
        }
       theWebView.loadRequest(urlRequestCache)

3
2018-01-28 09:04



这不适用于WKWebView,如此处所述, forums.developer.apple.com/thread/53573。 - guoc
@guoc - 我在一年之前自己尝试过,它在wkwebview中运行良好 - Durai Amuthan.H