我的应用程序使用了NSURLProtocol的子类化。应用程序中有几个UIWebViews,对于在NSURLProtocol中实现的特定算法,我需要知道哪个UIWebViews发送请求。
我的理解是,self客户端返回的对象应该与请求对象有一定的联系。但是NSURLProtocolClient (即由self client返回的object实现的协议)和底层object _NSCFURLProtocolBridge都没有任何属性/方法来获取请求的发送者。
有人能帮我出点子吗?
发布于 2012-03-15 14:07:58
NSURLRequest有一个名为mainDocumentURL的方法,它返回根文档的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
}
}然后,您可以查看NSURLProtocol方法中的mainDocumentURL来标识UIWebView。这不是愚蠢的证明,因为它没有考虑到多个UIWebViews加载相同的URL的情况。但这是我能想到的最好的解决方案。
发布于 2013-11-01 21:47:05
参见https://stackoverflow.com/a/19700910/502149。总而言之,您可以在使用用户默认设置创建每个UIWebView之前为其设置用户代理。因为该视图没有考虑用户代理的后续更改,所以在每个UIWebView中都会有一个不同的用户代理。您可以在NSURLProtcol中使用它来标识视图,并且可以传递真正的UA代理,这样服务器就看不到任何差异。
请注意,要让UIWebView“记住”UA字符串设置,它必须在更改设置之前发出至少一个请求。
发布于 2011-11-09 01:34:44
在loadRequest中:
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) {https://stackoverflow.com/questions/3367122
复制相似问题