14

我在 中显示一个网络应用程序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但缓存仍然存在。

4

2 回答 2

22

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

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

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

您可以在其中生成一个随机字母数字字符串作为 randQuery 查询参数,或者保持一个持久计数并向上计数。

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

于 2013-10-13T19:17:37.410 回答
7

我遇到了同样的问题,将 HTTPShouldHandleCookies 属性设置为 NO 解决了我的问题。

例如:

NSMutableURLRequest  *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strurl]];

[request setHTTPShouldHandleCookies:NO];

[webView loadRequest: request];

希望这有帮助。

于 2013-11-14T18:22:26.787 回答