UIWebView loadRequest:
と一緒にいくつかの追加情報を渡して、実装がNSURLProtocol
に達するようにする必要があります。情報はNSURLRequest
にバインドすることはできません。情報はNSURLRequest mainDocumentURL
で保持する必要があるためです。だから、私はNSURL
をサブクラス化し、それにNSURLRequest
を作りました。私はすでにNSURLProtocol startLoading
に達するNSURLRequest
が私がUIWebView loadRequest
に与えたインスタンスではないことを知っていたので、私はNSURL copyWithZone
も実装しました。iOS:NSURLProtocolにカスタムNSURLを渡す
ここで、NSURLProtocol canInitWithRequest
は、合理的に予想されるように1回ではなく、startLoading
の前に少なくとも4回呼び出されます。最初の2回、入力NSURLRequest
には私のカスタムNSURL
実装がまだ含まれています。その後、CFURLCopyAbsoluteURL
と呼ばれる残念な内部コードが、自分のカスタムNSURL
のabsoluteURL
と次の(とその後のstartLoading
)の新鮮なNSURL
の新しい完全NSURLRequest
をすでに取得しています。 copyWithZone
は呼び出されず、サブクラスNSURL
は失われます。
URL文字列に直接添付して、劣悪で壊れやすい解決策を放棄して実装する前に、より高いレベルのウィザードに質問したいと思います。NSURLProtocol
レーダーまたはCFURLCopyAbsoluteURL
を私のカスタムインスタンスの持ち込みに騙す方法。私はNSURL absoluteURL
をハックしようとしましたが、私のカスタムNSURLクラスの新しいインスタンスを再び返していますが、それは役に立ちませんでした。私はNSURLProtocol setProperty
の機能のいくつかの約束を見ましたが、今はかなり役に立たないようです。 URLローディングシステムにより、すべての幸せの新しいインスタンスが作成され、NSURLRequest
がNSURLProtocol
に到着したのは、誤ってUIWebView
に入力されたものと同じようです。
UPDATE:は、[OK]を私はできるだけ短いポストを維持したいが、それでも最初の応答は、技術的なバックグラウンドを求めているので、ここで私達は行く:私はアプリで複数のUIWebView
秒を持っています。これらのビューは同時に要求を実行し、絶対に同じURLに対する要求を実行できます。デスクトップブラウザのタブと似ています。しかし、私はUIWebView
のどれがそれぞれ特定の起源であったかを区別する必要がありますNSURLRequest
はNSURLProtocol
に到着します。私は、各URL要求と共にコンテキストが運ばれる必要があります。複数のUIWebViews
がいつでも同じURLを読み込んでいる可能性があるため、URLをデータにマップするだけでは不十分です。
更新2:NSURL
にコンテキスト情報を添付することが推奨され、私の理解にとどまる限り、使用可能です。問題は、ページ内で参照されるリソース(画像など)のリクエストがUIWebViewDelegate
をまったく通過せず、NSURLProtocol
に直接つながることです。私はNSURLProtocol
の前のどこにでもそのような要求に触れる、検査する、または変更する機会がありません。このようなリクエストのコンテキストリンクは、NSURLRequest mainDocumentURL
です。
ここでの重要な問題は、URLよりもNSURLに関する情報を多く読み込もうとしていることです。だから問題は、どのような情報をあなたが通過しようとしているのですか?通常、NSURLProtocolにアクセス可能なオブジェクトの中にURLのマップを「他のデータ」に保存することで、これを読み込むことになりますが、ここで解決しようとしていることをよりよく理解することが役立ちます。 –
、更新情報を参照してください。 –