【发布时间】:2014-03-13 03:47:22
【问题描述】:
我在具有 UIWebView 的应用中发现了一个问题。 iOS 7 缓存了一个空白的 body 304 响应,导致在用户刷新 UIWebView 时显示空白页面。这不是很好的用户体验,我正试图弄清楚如何在 iOS 端解决这个问题,因为我无法控制 Amazon S3 如何响应标头(这是我用于资源托管的人)。
这些人发现了这个错误的更多细节:http://tech.vg.no/2013/10/02/ios7-bug-shows-white-page-when-getting-304-not-modified-from-server/
对于如何在应用端而非服务器端解决此问题提供的任何帮助,我将不胜感激。
谢谢。
更新:使用赏金的建议作为指导修复了此错误:
@property (nonatomic, strong) NSString *lastURL;
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if ([self.webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"].length < 1)
{
NSLog(@"Reconstructing request...");
NSString *uniqueURL = [NSString stringWithFormat:@"%@?t=%@", self.lastURL, [[NSProcessInfo processInfo] globallyUniqueString]];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:uniqueURL] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:5.0]];
}
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
self.lastURL = [request.URL absoluteString];
return YES;
}
【问题讨论】:
-
评论:这也适用于任何其他网站,而不仅仅是 S3。根本问题是我们无法控制的 UIWebView 的内部缓存。
-
使用标记的答案建议修复了错误
-
如果这个 URL 已经有一个查询参数,请小心在你的缓存破坏 URL 添加前加上 &!
-
如果您在发出第二个请求时明确忽略本地和远程缓存,为什么还要添加“?t=
”查询参数? -
@user1888440 可能是因为 iOS 7 忽略了它.. 因此问题的目的。
标签: ios iphone objective-c ios7 uiwebview