首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从NSURLProtocol内部获取请求UIWebView

如何从NSURLProtocol内部获取请求UIWebView
EN

Stack Overflow用户
提问于 2010-07-30 05:32:52
回答 5查看 2.4K关注 0票数 4

我的应用程序使用了NSURLProtocol的子类化。应用程序中有几个UIWebViews,对于在NSURLProtocol中实现的特定算法,我需要知道哪个UIWebViews发送请求。

我的理解是,self客户端返回的对象应该与请求对象有一定的联系。但是NSURLProtocolClient (即由self client返回的object实现的协议)和底层object _NSCFURLProtocolBridge都没有任何属性/方法来获取请求的发送者。

有人能帮我出点子吗?

EN

回答 5

Stack Overflow用户

发布于 2012-03-15 14:07:58

NSURLRequest有一个名为mainDocumentURL的方法,它返回根文档的URL。您可以将其保存在UIWebViewDelegate方法中,如下所示

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

然后,您可以查看NSURLProtocol方法中的mainDocumentURL来标识UIWebView。这不是愚蠢的证明,因为它没有考虑到多个UIWebViews加载相同的URL的情况。但这是我能想到的最好的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2013-11-01 21:47:05

参见https://stackoverflow.com/a/19700910/502149。总而言之,您可以在使用用户默认设置创建每个UIWebView之前为其设置用户代理。因为该视图没有考虑用户代理的后续更改,所以在每个UIWebView中都会有一个不同的用户代理。您可以在NSURLProtcol中使用它来标识视图,并且可以传递真正的UA代理,这样服务器就看不到任何差异。

请注意,要让UIWebView“记住”UA字符串设置,它必须在更改设置之前发出至少一个请求。

票数 1
EN

Stack Overflow用户

发布于 2011-11-09 01:34:44

在loadRequest中:

代码语言:javascript
复制
static NSString* ProtocolClient=@"urAPP_ProtocolClient";

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

在协议中:

代码语言:javascript
复制
NSString* header=[_currentRequest valueForHTTPHeaderField:ProtocolClient];

if (header) {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3367122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档