4

私のアプリは NSURLProtocol のサブクラス化を使用しています。アプリにはいくつかの UIWebView があり、NSURLProtocol に実装されている特定のアルゴリズムについては、どの UIWebView が要求を送信するかを知る必要があります。

私の理解では、[self client] によって返されたオブジェクトは、オブジェクトの要求とある程度関連している必要があります。ただし、NSURLProtocolClient ([self client] によって返されるオブジェクトによって実装されるプロトコル) も、基になるオブジェクト _NSCFURLProtocolBridge にも、要求の送信者を取得するためのプロパティ/メソッドはありません。

誰でもアイデアを手伝ってもらえますか?

4

5 に答える 5

3

NSURLRequestmainDocumentURLルート ドキュメントの URL を返すメソッドが呼び出されます。UIWebViewDelegateこのような方法でそれを保存できる可能性があります。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
   if([[request.URL absoluteString] isEqualToString:[request.mainDocumentURL absoluteString]]) 
   {
      // associate this URL with this UIWebview
   }
}

mainDocumentURL次に、メソッド内の を見て、NSURLProtocolを識別できますUIWebViewUIWebViews複数が同じ URL をロードするケースを考慮していないため、これは絶対確実ではありません。しかし、これは私が考えることができる最善の解決策です。

于 2012-03-15T06:07:58.260 に答える
1

https://stackoverflow.com/a/19700910/502149を参照してください。要約UIWebViewすると、ユーザー デフォルトを使用して作成する前に、それぞれのユーザー エージェントを設定できます。このビューではユーザー エージェントのその後の変更が考慮されていないため、各 で異なるユーザー エージェントになることになりますUIWebView。これを使用しNSURLProtcolてビューを識別し、サーバーが違いを認識しないように実際の UA エージェントを渡すことができます。

UIWebViewが UA 文字列の設定を「記憶」するには、設定が変更される前に少なくとも 1 つの要求を行う必要があることに注意してください。

于 2013-11-01T13:47:04.760 に答える
0
- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

リクエストは可変タイプです。
+[NSURLProtocol setProperty:forKey:inRequest:]したがって、カスタム プロパティの設定に使用できます。そして+[NSURLProtocol propertyForKey:inRequest]その中からNSURLProtocol

于 2016-03-31T09:34:43.850 に答える
0

ロードリクエストで:

static NSString* ProtocolClient=@"urAPP_ProtocolClient";

    NSMutableURLRequest* Request=[request mutableCopy];
    [Request setValue:[NSString stringWithFormat:@"someID",self.someID] forHTTPHeaderField:ProtocolClient];

プロトコルで:

NSString* header=[_currentRequest valueForHTTPHeaderField:ProtocolClient];

if (header) {
于 2011-11-08T17:34:44.297 に答える
-1

理想的には、NSURLProtocolからUIWebViewを直接参照する必要はありません。ただし、過去には、NSURLProtocolが通常のデリゲートメッセージの外部にあるメッセージをUIWebViewに送信する必要がありました... NSNotificationCenterを使用し、NSURLRequestオブジェクトをオブジェクトとして使用して通知を投稿し、関心のある通知をサブスクライブしますリスナー。

于 2011-06-09T18:46:21.917 に答える