修改app webview的js修改useragentt会有什么风险吗

iOS和H5交互的时候,H5需要用userAgent带一些参数,需要我们修改默认的UserAgent为自定义的。
首先,给大家普及一下userAgent的历史,点击查看。
1 在Appdelegate里面register一个新的UserAgent
//get the original user-agent of webview
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSString *oldAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"old agent :%@", oldAgent);
//add my info to the new agent
NSString *newAgent = [oldAgent stringByAppendingString:@" Jiecao/2.4.7 ch_appstore"];
NSLog(@"new agent :%@", newAgent);
//regist the new agent
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
答案:该方法修改的是全局的UserAgent设置,[NSUserDefault stangarUserDefault]是一个单例,webView请求的时候就会从该单例中取值。注意,该方法只会修改webView的userAgent,其他的http请求的userAgent不会受影响。
最后补充一句,用的是EasyJS做交互。
阅读(...) 评论()5860人阅读
IOS学习(59)
使用了第二种方法,略作修改,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//欢迎页显示3秒
[NSThread sleepForTimeInterval:2.0];
//修改app默认UA
@autoreleasepool {
UIWebView* tempWebView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSString* userAgent = [tempWebView stringByEvaluatingJavaScriptFromString:@&navigator.userAgent&];
NSLog(@&------%@&,userAgent);
NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleExecutableKey];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
NSString *ua = [NSString stringWithFormat:@&%@ %@/%@&,
userAgent,
executableFile,version];
NSLog(@&------%@&,ua);
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@&UserAgent& : ua, @&User-Agent& : ua}];
#if !__has_feature(objc_arc)
[tempWebView release];
在网页中查看效果
//在Safari中打开文章中的文档
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@&ua=======%@&,[request valueForHTTPHeaderField:@&User-Agent& ]);
//判断是否是单击
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
NSURL *url = [request URL];
[[UIApplication sharedApplication]openURL:url];
return NO;
return YES;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:284786次
积分:2993
积分:2993
排名:第9542名
原创:117篇
转载:11篇
评论:22条
(2)(2)(3)(2)(2)(3)(2)(12)(3)(2)(3)(77)(1)(1)(2)(2)(10)1667人阅读
Android(47)
为了便于WEB端统计分析,需要将APP的&&作特征标记,所以搜索了一下android对webview的User-Agent设置方法,具体如下:
// 修改ua使得web端正确判断
String ua = webview.getSettings().getUserAgentString();
webview.getSettings().setUserAgentString(ua+&; 自定义标记&);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:83481次
积分:1556
积分:1556
排名:千里之外
原创:64篇
评论:53条
(1)(2)(1)(3)(1)(1)(1)(3)(4)(1)(6)(2)(1)(2)(3)(2)(3)(3)(1)(1)(2)(1)(2)(1)(1)(1)(1)(1)(1)(1)(1)(4)(2)(4)(1)(1)(1)主题 : iOS中为什么要修改useragent?
级别: 精灵王
发帖: 1252
可可豆: 3166 CB
威望: 3210 点
在线时间: 1414(时)
发自: Web Page
来源于&&分类
iOS中为什么要修改useragent?&&&
我看有的代码里用到这句,[webview stringByEvaluatingJavaScriptFromString:@&navigator.userAgent&];而且执行的时机较早,这是干什么用的,是要用H5开发的意思吗?
UID: 96411
发帖: 1689
可可豆: 8292 CB
威望: 8329 点
在线时间: 3938(时)
发自: Web Page
回 楼主(1204) 的帖子
UA,把手机的一些信息传给要webView加载的网页,网页内部根据不同信息做适配
减少对别人的依赖,                                   才能告别菜鸟时代。
级别: 精灵王
发帖: 1252
可可豆: 3166 CB
威望: 3210 点
在线时间: 1414(时)
发自: Web Page
Re:回 楼主(1204) 的帖子
谢谢版主,那这需要程序启动时就拿到ua吗,我看直接在appdelegate的initialize里面读到ua,然后存到userdefaults里面了引用 引用第1楼下雨天、轮滑于 14:12发表的 回 楼主(1204) 的帖子 :UA,把手机的一些信息传给要webView加载的网页,网页内部根据不同信息做适配
级别: 新手上路
UID: 151805
可可豆: 87 CB
威望: 83 点
在线时间: 175(时)
发自: Web Page
回 楼主(1204) 的帖子
开发时和网页前端商定需要添加的UA,在原来的基础上添加UA&&&&// 修改 UA web页面根据UA判断当前是否是app打开,否则有些功能无法使用&&&&UIWebView* tempWebView = [[UIWebView alloc] initWithFrame:CGRectZero];&&&&NSString* userAgent = [tempWebView stringByEvaluatingJavaScriptFromString:@&navigator.userAgent&];&&&&NSString *ua = [NSString stringWithFormat:@&%@\\%@&, userAgent, @& / app Browser&];&&&&[[NSUserDefaults standardUserDefaults] registerDefaults:@{@&UserAgent& : ua, @&User-Agent& : ua}];比如你在做移动APP开发时,有个网站在你手机端APP打开之后喝直接在浏览器中打开之后看到的东西不一样,网页会根据UA判断你是app打开的还是直接浏览器打开的,如果没有找到商定的UA信息就认定这个链接是在浏览器打开的,如果查询到商定的UA就是用app打开的,两种情况可以让你看到不同的东西,做不同的操作,比如有些东西开发者只想让你使用app打开才能看见
级别: 新手上路
UID: 151805
可可豆: 87 CB
威望: 83 点
在线时间: 175(时)
发自: Web Page
回 2楼(1204) 的帖子
并非必须在app启动的时候添加,在请求网页的时候添加也可以,但是这个添加之后貌似是全局的
级别: 精灵王
发帖: 1252
可可豆: 3166 CB
威望: 3210 点
在线时间: 1414(时)
发自: Web Page
Re:回 楼主(1204) 的帖子
受教了,学习了,长姿势啦 引用 引用第3楼yongshideweiyi于 14:46发表的 回 楼主(1204) 的帖子 :开发时和网页前端商定需要添加的UA,在原来的基础上添加UA    // 修改 UA web页面根据UA判断当前是否是app打开,否则有些功能无法使用    UIWebView* tempWebView = [[UIWebView alloc] initWithFrame:CGRectZero];    NSString* userAgent = [tempWebView stringByEvaluatingJavaScriptFromString:@&navigator.userAgent&];    NSString *ua = [NSString stringWithFormat:@&%@\\%@&, userAgent, @& / app Browser&];.......
级别: 侠客
UID: 532325
可可豆: 267 CB
威望: 186 点
在线时间: 129(时)
发自: Web Page
&&&&&& mark&&mark mark 极度受用 万分感谢
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版给UIWebView加个自定义的User-Agent - 简书
给UIWebView加个自定义的User-Agent
//get the user agent
NSString *oldAgent = [self.webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"old agent :%@", oldAgent);
NSString *newAgent = [oldAgent stringByAppendingString:@" custom user agent"];
NSLog(@"new agent :%@", newAgent);
//regist the new agent
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@""]]];
补充一下User-Agent的作用:
在http协议里,头信息中有一个 User-Agent,它的作用是告诉服务器,用户客户端是什么浏览器,以及操作系统的信息的。在某些特殊的情况下,服务器根据浏览器的不同类型,输出不 同的内容。大概在三四年前,很多网站都只显示给IE看,所以当时的 opera 浏览器还特别做了一个功能,可以把它的 User-Agent 换成 IE 的。所以 user-agent 是非常不可靠的,原因就是它是客户端自己决定并发送给服务器。
iOS 开发者}

我要回帖

更多关于 火狐修改useragent 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信