didFailLoadWithError UIWebview的乐趣

时间:2013-11-13 16:35:09

标签: ios uiwebview

如果你看一下这里的代码:

https://github.com/evernote/evernote-sdk-ios/blob/master/evernote-sdk-ios/internal/ENOAuthViewController.m

在UIWebView中实现OAuth 2.0流程。

作者将此代码用于didFailLoadWithError委托函数:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    if ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102) {

        return;
    }

    if (error.code == NSURLErrorCancelled) {
        // ignore rapid repeated clicking (error code -999)
        return;
    }
}

他为什么忽略这两个错误(NSURLErrorCancelled)和错误代码102?

2 个答案:

答案 0 :(得分:10)

WebKitErrorDomain中的错误代码102是UIWebView引发的错误,如果其委托从webView:shouldStartLoadWithRequest:navigationType返回FALSE。当使用UIWebView实现OAuth2流时,通常在遇到最终重定向URL时执行此操作,因为这意味着是时候隐藏Web视图并开始直接从身份验证中使用令牌在URL中交换访问代码的过程提供商。

第二个错误是我不太熟悉但基于提供的代码注释和this question的接受答案,我怀疑浏览器或UIWebView中有一些逻辑会自动过滤掉快速重复的点击。该错误可能是由设计引起的,因此如果他们感兴趣,可以通知代表。

答案 1 :(得分:0)

from wiki

  

102处理(WebDAV; RFC 2518)由于WebDAV请求可能包含许多   涉及文件操作的子请求,可能需要很长时间   完成请求。此代码表示服务器已收到   并且正在处理请求,但尚未提供任何响应。[3]   这可以防止客户端超时并假设请求是   丢失。

from

  

WebKitErrorDomain NSError用于指示错误的字符串   是由WebKit类发起的。

看起来loke web kit错误是内部的,作者不想处理这个错误

更新

看不到那里有&&在条件。这意味着如果出现WebKitErrorDomain并且代码为102 - 这意味着Web工具包暂时无法显示页面,因为子请求太多而您必须稍等一下