ios - 移除 UIWebView 的内部缓存

标签 ios cocoa-touch caching uiwebview nsurlcache

我在 UIWebView 中显示网络应用程序,有时页面内容会发生变化。内容更改后,应用程序会清除缓存。但是,当我转到我之前访问过的页面时,UIWebView 不会发送 HTTP GET 请求,而是从缓存中加载,即使我已经像这样禁用了缓存:

[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];

最初我使用 cachePolicy cachePolicy:NSURLRequestReturnCacheDataElseLoad 加载请求。

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:myURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]];

UIWebView 有某种内部缓存。已经访问过的页面将从该内部缓存中加载,而不是通过 NSURLCache 加载,并且也不会发送任何请求。

有没有办法清除UIWebView的内部缓存?我什至重新创建了 UIWebView 但缓存仍然存在。

最佳答案

看起来这里发生的是它重新加载实际的 HTML 文件,但不一定重新加载该页面中的资源。

我见过的一种可能的解决方案是将查询参数附加到 URL 的末尾。例如:

NSString *testURL = [NSString stringWithFormat:@"%@?t=%@", url, randQuery];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:testURL] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]];

生成 random alphanumeric string 的位置作为你的 randQuery 查询参数,或者保持一个持久的计数并只是计数。

这应该强制 UIWebView 从远程资源加载。

关于ios - 移除 UIWebView 的内部缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19113682/

相关文章:

ios - 如何使用 NSDictionary 收集嵌套在数组中的 JSON 数据

ios - 阻止 SKSpriteNode 变慢

ios - 为什么我会收到一条错误消息,指出自动布局为 'Unable to simultaneously satisfy constraints.'?

iphone - 区分动态生成的按钮

iphone - UISegmentedView 中的 UIButton 没有被按下

objective-c - 我必须自动释放这个对象吗?

php - 了解使用 php 在服务器端缓存 js 文件

c# - 刷新高速缓存时如何提供过时的数据?

ios - 如何识别哪个 GMSMarker 被点击 - iOS, Swift

http - 一种使用浏览器缓存进行增量更新的解决思路