【发布时间】:2011-05-08 08:31:19
【问题描述】:
我正在实现一个具有 UIWebView 的应用程序。我的问题是当它无法加载带有 URL 的 webview 时,我需要显示一个警报。它对 1001 和 1009 类型错误工作正常,但对 404 错误没有响应。我无法解决。我该如何处理这些类型的错误?
【问题讨论】:
标签: objective-c uiwebview ios4
我正在实现一个具有 UIWebView 的应用程序。我的问题是当它无法加载带有 URL 的 webview 时,我需要显示一个警报。它对 1001 和 1009 类型错误工作正常,但对 404 错误没有响应。我无法解决。我该如何处理这些类型的错误?
【问题讨论】:
标签: objective-c uiwebview ios4
#pragma mark -
#pragma mark - UIWebView Delegate Methods
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
static BOOL isRequestWeb = YES;
if (isRequestWeb) {
NSHTTPURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
if (response.statusCode == 404) {
// code for 404
return NO;
} else if (response.statusCode == 403) {
// code for 403
return NO;
}
[webView loadData:data MIMEType:@"text/html" textEncodingName:nil baseURL:[request URL]];
isRequestWeb = NO;
return NO;
}
return YES;
}
【讨论】:
一些网络服务器会返回一个 404 错误的网页,该网页正确加载,因此 webview 没有加载失败。
这可能就是您看到这种行为的原因。
没有简单的方法可以获取 webview 的 URLConnection 以响应状态码回调。
如果您确实需要在遇到 404 时显示警报,而不是让网络服务器显示它自己的 404 页面,那么您可以自己为要加载的 URL 创建一个 NSURLConnection 和 NSURLRequest。
然后,如果成功,您可以下载 HTML 并手动将其放入 webview。这将使您能够控制 URLConnection 委托并让您响应 404 响应代码。
【讨论】:
loadHTML:baseURL: 手动将其加载到 UIWebView 中。您不需要提出两个请求。如果请求不成功,您可以查看响应码了解原因。