iOS UIWebView 自定义 UserAgent

获取 UIWebview 的useragent

关于获取 UIWebview 的useragent。我对网上的一种做法实在画面太美不忍看。他们使用UIWebview 去加载一个请求,通过返回来数据(附有 UserAgent 的参数)来获取Useragent,这种做法需要设置webview 代理、发请求、要解析数据、要处理用完的对象。

实际上只需要两行代码就能搞定

[objc] view plaincopyprint?

UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero];  
NSString* secretAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];  

[objc] view plaincopyprint?

<span style="font-size: 14px;">secretAgent</span>  

这样我们就已经拿到了 useragent。

secretAgent值为: Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D167

附加自定义字段到 Useragent中

[objc] view plaincopyprint?

NSString *newUagent = [NSString stringWithFormat:@"%@ appname/3.5.2",secretAgent];  
NSDictionary *dictionary = [[NSDictionary alloc]  
                                initWithObjectsAndKeys:newUagent, @"UserAgent", nil nil];  
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];  

这里我们附加的是appname,以及对应的版本号。

newUagent值为: Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D167 appname/3.5.2

搞定!
来源:
===============================================================
我的需求是:用户使用我的浏览器浏览网页,服务器可以得到我的浏览器名称和版本号,站长工具能查看到客户端来源。OK,解决思路就是修改系统默认的用户代理UserAgent,这是没差的。

曾经做过的App也有这样的需求,思路是在UIWebView 的 Request 的 Header 中设置 UserAgent,最后证实这条思路是行不通的,后来由于时间问题,这个功能就放弃了。如今有个App又有这个需求,看到UC浏览器设置中有个UA设置,让我很是羡慕,果然愿意解决问题的人总是幸运的,再网上找到相关文章。了解大概两种思路,第一种是使用私有API,第二种则是iOS SDK内的。第一种这里就放弃不讲了,只能上第二种实现思路。

// 获取 iOS 默认的 UserAgent,可以很巧妙地创建一个空的UIWebView来获取:

NSString *userAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@”navigator.userAgent”];

// 获取App名称,我的App有本地化支持,所以是如下的写法

NSString *appName = NSLocalizedStringFromTable(@”CFBundleDisplayName”, @”InfoPlist”, nil);

// 如果不需要本地化的App名称,可以使用下面这句

// NSString * appName = [[NSBundle mainBundle] infoDictionary][@”CFBundleDisplayName”];

NSString *version = [[NSBundle mainBundle] infoDictionary][@”CFBundleShortVersionString”];

NSString *customUserAgent = [userAgent stringByAppendingFormat:@” %@/%@”, appName, version];

[[NSUserDefaults standardUserDefaults] registerDefaults:@{@”UserAgent”:customUserAgent}];

// ———- 随便写个测试代码,记得设置 delegate哦,这只是测试代码

UIWebView *webView = [[UIWebView alloc] init];

webView.delegate = self;

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@”http://www.baidu.com/“]]];

  • (void)webViewDidFinishLoad:(UIWebView *)webView

{

NSLog(@”UserAgent = %@”, [webView stringByEvaluatingJavaScriptFromString:@”navigator.userAgent”]);

}

Xcode 5.1.1 iOS 7.1 模拟器下得到的结果是:

Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) 中华浏览器/1.2.2

希望以上内容对有需要的开发者有所帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值