问题描述
如何在 iOS 5 中更改 UIWebView 的用户代理?
How can I change the user-agent of UIWebView in iOS 5?
到目前为止我做了什么:使用委托回调,拦截 NSURLRequest,创建一个新的 url 请求并将它的用户代理设置为我想要的任何内容,然后下载数据并使用loadData:MIMEType:...."重新加载 UIWebView.
What I have done so far: Using the delegate call back, intercept the NSURLRequest, create a new url request and set it's user-agent as whatever I want, then download the data and reload the UIWebView with "loadData:MIMEType:....".
问题:这会导致无限递归,我在其中加载数据,这会回调委托,实习生会调用委托....
Problem: This causes infinite recursion, where I load the data, which calls the delegate back, which intern calls the delegate....
这是委托方法:
- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
dispatch_async(kBgQueue, ^{
NSURLResponse *response = nil;
NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[request URL]];
NSDictionary *headers = [NSDictionary dictionaryWithObject:
@"custom_test_agent" forKey:@"User-Agent"];
[newRequest setAllHTTPHeaderFields:headers];
[self setCurrentReqest:newRequest];
NSData *data = [NSURLConnection sendSynchronousRequest:newRequest
returningResponse:&response
error:nil];
dispatch_sync(dispatch_get_main_queue(), ^{
[webView loadData:data
MIMEType:[response MIMEType]
textEncodingName:[response textEncodingName]
baseURL:[request URL]];
});
});
return YES;
}
推荐答案
通过在应用启动时运行一次此代码来更改UserAgent"默认值:
Change the "UserAgent" default value by running this code once when your app starts:
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Your user agent", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
我使用它取得了巨大的成功,但想添加更多细节.要获取用户代理,您可以启用开发人员"菜单,设置用户代理,然后连接到此站点以将其打印出来:WhatsMyAgent.同样,您可以使用任何类型的移动设备进行连接,也可以通过这种方式进行连接.顺便说一句,这在 iOS7+ 中仍然可以正常工作
I have used this with great success, but want to add additional details. To get a user agent, you can enable the "Developer" menu, set the user agent, and then connect to this site to get it printed out for you: WhatsMyAgent. Likewise you can connect using any kind of mobile device, and get it that way too. BTW this is still working just fine in iOS7+
这篇关于UIWebView iOS5 改变用户代理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!