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