10

如果你看这里的代码:

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?

4

2 回答 2

14

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

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

于 2014-04-24T11:17:04.690 回答
2

来自维基

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

WebKitErrorDomain NSError 使用的字符串,表示错误是由 WebKit 类引起的。

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

更新

看不到有 && 条件。所以这意味着如果出现 WebKitErrorDomain 并且代码是 102 - 这意味着 web kit 目前无法显示页面,因为子请求太多,您必须稍等一下

于 2013-11-13T16:48:08.850 回答