忽略NSURLErrorDomain错误-999在UIWebView中不起作用

eme*_*gro 6 uiwebview ios

我试图避免在UIWebView委托返回类似错误时生成的问题.我在委托实现中有共同的解决方法(我在Internet的任何地方都看到过)

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    if ([error code] == NSURLErrorCancelled) return;
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,这并不总是有效.有时加载网络,另一次加载网页的一部分(标题,文本的一部分......),并且几次不加载任何东西.

还有其他解决方案吗?存在任何正常运行的浏览器的开源实现?

ser*_*gio 11

来自Apple文档:

NSURLErrorCancelled(-999)

"取消异步加载时返回.Web Kit框架委托在加载资源上执行取消操作时会收到此错误.请注意,如果取消下载,NSURLConnection或NSURLDownload委托将不会收到此错误."

因此,最可能出现这种情况的情况是,在第一个请求完成之前,您需要加载一个请求,然后加载另一个请求(或同一个请求).这可能发生.例如,如果您在类似的方法中调用loadRequest(或loadHTMLString)viewDidAppear:可以多次调用.如果您快速点击中的2个链接,也会发生这种情况UIWebView.

因此,一般建议是检查您调用loadRequest(或loadHTMLString)的方式和位置,并可能提供一些代码.

为了解决这个问题,我建议将以下跟踪添加到您的Web视图委托:

- (void)webViewDidStartLoad:(UIWebView *)webView {
      NSLog(@"Starting to download request: %@", [webView.request.URL absoluteString]);
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
      NSLog(@"Finished downloading request: %@", [webView.request.URL absoluteString]);
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    if ([error code] == NSURLErrorCancelled)
      NSLog(@"Canceled request: %@", [webView.request.URL absoluteString]);
}
Run Code Online (Sandbox Code Playgroud)

如果检查输出,您应该更清楚地看到发生了什么.如果您粘贴输出,我们可以尝试进一步帮助您.