我在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
,但缓存仍在那里。
答案 0 :(得分:21)
看来这里发生的是重新加载实际的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从远程资源加载。
答案 1 :(得分:7)
我遇到了同样的问题并将HTTPShouldHandleCookies属性设置为NO修复了我的问题。
例如:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strurl]];
[request setHTTPShouldHandleCookies:NO];
[webView loadRequest: request];
希望得到这个帮助。