UIWebView loadRequest:の実装に到達するように、いくつかの追加情報を とともに渡す必要がありNSURLProtocolます。NSURLRequest情報も保持する必要があるため、情報をバインドすることはできませんNSURLRequest mainDocumentURL。だから私はそれをサブクラス化してNSURL構築NSURLRequestしました。NSURLRequestに到達するのNSURLProtocol startLoadingは、私がフィードしたインスタンスではないことはすでにわかっていたので、URL読み込みシステムがそれを使用することを素朴に期待して、UIWebView loadRequest私も実装しました。NSURL copyWithZone
現在、NSURLProtocol canInitWithRequestは合理的に予想されるように 1 回ではなく、少なくとも 4 回呼び出されていstartLoadingます。その最初の 2 回、着信にNSURLRequestはまだカスタムNSURL実装が含まれています。次に、という不幸な内部コードが私のカスタムの をCFURLCopyAbsoluteURL要求し、次の(および後続の) はすでに完全に新しいを取得しています。は呼び出されず、私のサブクラスは失われます。absoluteURLNSURLcanInitWithRequeststartLoadingNSURLRequestNSURLcopyWithZoneNSURL
あきらめて、URL 文字列に直接何かを添付する劣悪で脆弱なソリューションを実装する前に、より高いレベルのウィザードに尋ねたいと思いますNSURLProtocol。CFURLCopyAbsoluteURL私のカスタムインスタンスを運んでいます。カスタム NSURL クラスの新しいインスタンスを再度返すことでハッキングを試みましNSURL absoluteURLたが、役に立ちませんでした。機能面で期待できることはいくつかありましNSURLProtocol setPropertyたが、今ではかなり役に立たないようです。URL 読み込みシステムは、すべての新しいインスタンスを喜んで作成し、NSURLRequest到着したものは、誤っNSURLProtocolて入力されたものと同じように見えます。UIWebView
更新:投稿をできるだけ短くしたかったのですが、最初の返信でさえ技術的な背景を尋ねているので、ここに行きます:UIWebViewアプリに複数の があります. これらのビューは同時にリクエストを実行する可能性があり、同じ URL に対するリクエストを絶対に実行できます。デスクトップブラウザのタブのようなものです。しかし、私はそれぞれの特定の到着UIWebViewの起源がどれであったかを区別する必要があります. 各 URL 要求で運ばれるコンテキストが必要です。複数の URL がいつでも同じ URL をロードしている可能性があるため、単純に URL をデータにマップすることはできません。NSURLRequestNSURLProtocolUIWebViews
更新 2:コンテキスト情報を添付することNSURLが推奨され、私の理解では、唯一の使用可能なものです。問題は、ページ内で参照されるリソース (画像など) のリクエストがまったく通過せずUIWebViewDelegate、NSURLProtocol直接到達することです。まで、そのようなリクエストに触れたり、検査したり、変更したりする機会はありませんNSURLProtocol。このようなリクエストの唯一のコンテキスト リンクは、NSURLRequest mainDocumentURL.