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;
    }
}

彼がこれら 2 つのエラー (NSURLErrorCancelled) とエラー コード 102 を無視するのはなぜですか?

4

2 に答える 2

14

WebKitErrorDomain からのエラー コード 102 は、UIWebView のデリゲートが から FALSE を返した場合に発生するエラーですwebView:shouldStartLoadWithRequest:navigationType。UIWebView を使用して OAuth2 フローを実装する場合、最終リダイレクト URL が検出されたときにこれを行うのが一般的です。これは、Web ビューを非表示にして、認証から直接トークンを使用して URL 内のアクセス コードを交換するプロセスを開始するときであることを意味するためです。プロバイダー。

2 番目のエラーはあまりよく知らないものですが、提供されたコード コメントとこの質問に対する受け入れられた回答に基づいて、ブラウザまたは UIWebView に、高速で繰り返されるクリックを自動的に除外するロジックがあると思われます。デリゲートが興味を持っている場合にこれを通知できるように、おそらく設計によってエラーが発生しています。

于 2014-04-24T11:17:04.690 に答える
2

ウィキから

102 処理 (WebDAV; RFC 2518) WebDAV リクエストには、ファイル操作を伴う多くのサブリクエストが含まれる可能性があるため、リクエストの完了に時間がかかる場合があります。このコードは、サーバーが要求を受信して​​処理していることを示していますが、まだ応答がありません。[3] これにより、クライアントがタイムアウトしたり、要求が失われたと見なされたりするのを防ぎます。

から

WebKitErrorDomain エラーが WebKit クラスによって発生したことを示すために NSError によって使用される文字列。

Web キットのエラーは内部的なものであり、作成者はこのエラーを処理したくないようです

アップデート

条件に && があることを確認しないでください。つまり、WebKitErrorDomain が表示され、コードが 102 の場合、つまり、サブリクエストが多すぎて少し待たなければならないため、Web Kit は今のところページを表示できないことを意味します。

于 2013-11-13T16:48:08.850 に答える