2010-11-11 53 views
0

我正在实现一个具有UIWebView的应用程序。我的问题是我需要显示一个警告,当它无法加载网址与网址。它对1001和1009类型的错误工作正常,但对404错误没有响应。我无法解决这个问题。你们能帮忙解决这些类型的错误吗?UIWebView didFailWithError没有响应404错误

感谢, S.

回答

1

一些Web服务器将返回一个网页的404错误,它加载正确,因此web视图没有加载失败。

这可能是您看到此行为的原因。

没有简单的方法来获得在webview的URLConnection为了响应状态码回调。

如果您确实需要在遇到404错误时显示警报,而不是让Web服务器显示它自己的404页面,那么您可以自己为要加载的URL创建NSURLConnection和NSURLRequest。

如果成功,您可以下载HTML并手动将其放入web视图。这将使您可以控制URLConnection委托,并让您响应404响应代码。

+0

感谢reqply, – sekhar 2010-11-11 10:01:51

+0

但是,如果我们使用NSURLConnection的了解响应代码,那么我们就需要调用服务器的两倍,而不是一个。一种是将请求加载到webview中,另一种是创建NSURLConnection。是否可以处理这两个而不是一个?如果我想错了,请建议我 – sekhar 2010-11-11 10:04:11

+0

创建一次NSURLConnection并调用它 - 如果成功,它将返回您请求的页面的HTML - 您可以使用'loadHTML:baseURL:'手动加载到UIWebView中。你不需要提出两个请求。如果请求不成功,您可以检查响应代码以查看原因。 – Jasarien 2010-11-11 14:53:06

1
#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; 
}