缓存在UIWebView中不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存在UIWebView中不起作用相关的知识,希望对你有一定的参考价值。

我有一个可以离线使用的网站。我创建了一个使用UIWebView的应用程序,我说我的UIWebView应该使用以下代码缓存此站点

[self setRequestObj:[NSURLRequest requestWithURL:loadUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]];

如果我第一次使用互联网连接启动我的应用程序,我的console登录

2016-08-24 15:37:01.713 BrowserApp[1991:345138] applicationDidBecomeActive!
2016-08-24 15:37:01.955 BrowserApp[1991:345138] NSURLRequestUseProtocolCachePolicy
2016-08-24 15:37:22.003 BrowserApp[1991:345138] applicationDidEnterBackground!
2016-08-24 15:37:22.559 BrowserApp[1991:345138] applicationWillEnterForeground!
2016-08-24 15:37:23.075 BrowserApp[1991:345138] applicationDidBecomeActive!
2016-08-24 15:37:37.069 BrowserApp[1991:345138] applicationDidEnterBackground!
2016-08-24 15:37:37.073 BrowserApp[1991:345138] applicationWillTerminate!

我看到每个方法都在文件AppDelegate.m中调用。我将手机与互联网断开连接,再次启动我的应用程序(不像我的console告诉的那样在背景中)并没有任何反应。我只得到一个白色的网站。

虽然我设置为website,为什么cache不会显示在我的屏幕上呢?

答案

可能是您加载的页面有一个到期日期(可能会设置为立即过期)。尝试将cahce策略设置为NSURLRequestReturnCacheDataElseLoad(虽然从长远来看可能不太好,因为它永远不会重新加载)。

或者,(更可能)来自网站的响应头可能包含缓存控制头。无论你说什么,该页面仍然可以告诉NSURLRequest它不应该被缓存。

要进行调查,您可以设置断点或在代码中放置一些日志记录来处理接收响应。将NSURLResponse投射到NSHTTPURLResponse,然后使用allHeaderFields查看标题。

另一答案

看起来像是URLCache的一个bug。当我杀死应用程序,将手机置于飞行模式并重新启动应用程序时,即使响应被缓存,WebViewDelegatedidFailLoadWithError也会被调用。

此外,URLCache.shared.cachedResponse(for: urlRequest)不会返回CachedURLResponse

我还检查了Cache.db,它包含已保存的响应和资产。

奇怪!

以上是关于缓存在UIWebView中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIWebview loadRequest 仅在 iPhone X 中不起作用

java代码在片段活动中不起作用

reCAPTCHA 在 iOS 10 UIWebView 中不起作用

Javascript代码片段在drupal中不起作用

UIWebview 中的 HTTPS url 在 iphone / ipad 中不起作用

onRequestPermissionsResult 在片段中不起作用