【问题标题】:The joys of didFailLoadWithError UIWebviewdidFailLoadWithError UIWebview 的乐趣
【发布时间】:2013-11-26 09:07:54
【问题描述】:

如果你看这里的代码:

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?

【问题讨论】:

    标签: ios uiwebview


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      from wiki

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

      from

      WebKitErrorDomain NSError 用来指示错误的字符串 起源于一个 WebKit 类。

      看起来 loke web kit 错误是内部问题,作者不想处理此错误

      更新

      看不到 && 的状态。所以这意味着如果出现 WebKitErrorDomain 并且代码是 102 -- 这意味着 web kit 暂时无法显示页面,因为子请求太多,您必须稍等片刻

      【讨论】:

        猜你喜欢
        • 2017-02-08
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 2013-01-05
        • 2012-02-02
        • 2015-04-13
        • 1970-01-01
        • 2016-11-05
        相关资源
        最近更新 更多