【问题标题】:UIWebView didFailWithError is not responding for 404 errorsUIWebView didFailWithError 没有响应 404 错误
【发布时间】:2011-05-08 08:31:19
【问题描述】:

我正在实现一个具有 UIWebView 的应用程序。我的问题是当它无法加载带有 URL 的 webview 时,我需要显示一个警报。它对 1001 和 1009 类型错误工作正常,但对 404 错误没有响应。我无法解决。我该如何处理这些类型的错误?

【问题讨论】:

    标签: objective-c uiwebview ios4


    【解决方案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;
    }
    

    【讨论】:

      【解决方案2】:

      一些网络服务器会返回一个 404 错误的网页,该网页正确加载,因此 webview 没有加载失败。

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

      没有简单的方法可以获取 webview 的 URLConnection 以响应状态码回调。

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

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

      【讨论】:

      • 但是如果我们使用 NSURLConnection 知道响应码,那么我们需要调用服务器两次而不是一次。一种是将请求加载到 webview 中,另一种是创建 NSURLConnection。是否可以处理这两个而不是一个?如果我想错了,请建议我
      • 创建一次 NSURLConnection 并调用它 - 如果成功,它将返回您请求的页面的 HTML - 您可以使用 loadHTML:baseURL: 手动将其加载到 UIWebView 中。您不需要提出两个请求。如果请求不成功,您可以查看响应码了解原因。
      猜你喜欢
      • 1970-01-01
      • 2012-05-12
      • 2019-10-23
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2015-09-04
      相关资源
      最近更新 更多