iOS 修改UIWebView的UserAgent

iOS和H5交互的时候,H5需要用userAgent带一些参数,需要我们修改默认的UserAgent为自定义的。

首先,给大家普及一下userAgent的历史,点击UserAgent查看。

网上搜了好多资料。没有一个方式是好用的,总结起来,以下2个方法都不好用:

1 ,直接设置request的header里面的userAgent

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

[request addValue:@"Jiecao/2.4.7" forHTTPHeaderField:@"user-agent"];

[self.webView loadRequest:request];

2,在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是只读属性,所以失败。第二个方法,修改的是全局的UserAgent设置,[NSUserDefault stangarUserDefault]是一个单例,修改完到下一次调用之前,会被默认值覆盖。(自己猜的)

所以,正确的修改方式是在loadRequest之前去修改这个全局UserAgent值。

NSString *customUserAgent = [NSString stringWithFormat:@" %@/%@/%@", @"wt", @"iPhone", @"1.0.0"];
    [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}];
    NSURL *url = [NSURL URLWithString:self.requestUrl];
    NSURLRequest *request = [NSURLRequest requestWithURL:url
                                             cachePolicy:NSURLRequestUseProtocolCachePolicy
                                         timeoutInterval:10.f];
    [self.webHolder loadRequest:request];

最后补充一句,用的是EasyJS做交互。

时间: 2024-10-15 20:12:22

iOS 修改UIWebView的UserAgent的相关文章

IOS中UIWebView和JavaScript交互(转自http://blog.2jun.net/2012/11/02/webviewandjs/)

IOS中UIWebView和JavaScript交互 当程序中使用到UIWebView控件的时候,难免会遇到需要与页面进行交互的情况.这种情况在android平台下比较容易处理,android平台下WebView控件的addJavascriptInterface()方法可以很轻松的完成交互,而IOS上就稍复杂一些. 页面与客户端的交互是通过JS来完成的,通常情况下与JS的交互可以分为两种:客户端传递给JS一些数据和JS向客户端请求一些本地操作.下面分别对这两种情况进行处理. JS向客户端请求本地

修改Chrome的UserAgent

修改Chrome的UserAgent 直接在chrome商店中搜索user-agent switcher 打开chrome 商店,搜索 user-agent switcher   点击免费, 然后执行安装,稍等片刻.就会成功   安装完成后,会在右上角显示一个UA图标.   点击这个图标,显示很多的useragent 可以测试选择IOS IP4. 那么选择后,涮新页面,直接在 百度中搜搜,就可以看到效果了   如何自定义User-Agent 可以右击图标---选项. 然后在 Custom Use

ios上uiwebview的一些实用技巧

前几个星期接到公司一个项目,要用webview在客户端上播视频,作为一个前端实习生,这种需求真是蛋疼……一不知webview是何方神圣,二不知咋调试…… 下面就是蛋疼的开始:  寻找调试工具:好,非weinre莫属了,又是node的,又是npm的……且行且珍惜(虽然UC浏览器有个开发者版本,但调试麻烦,没有weinre灵活.) 项目的视频抓取自新浪和优酷 ①抓来的优酷视频是个flash(下面顺便把优酷这个坑爹的也说了吧,最后想了下,还是在另外一片随笔发吧),直接嵌到(ui)webview里播放就

iOS中UIWebView的使用详解

iOS中UIWebView的使用详解 一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,例如我加载百度的主页:     UIWebView * view = [[UIWebView al

修改浏览器的User-Agent来伪装你的浏览器和操作系统

近期很多文章都提到了User-Agent (UA) 字符串,但大部分网友都不知道这个东西有什么用处.其实简单的说User-Agent就是客户端浏览器等应用程序使用的一种特殊的网络协议,在每次浏览器(邮件客户端/搜索引擎蜘蛛)进行 HTTP 请求时发送到服务器,服务器就知道了用户是使用什么浏览器(邮件客户端/搜索引擎蜘蛛)来访问的.既然是人为规定的协议,那么就是说不管什么浏览器,默认的UA都是可以更改的.有时候为了达到一些不可告人的目的,我就经常需要更改一下UA的设置,比如伪装一下浏览器类型,比如

iOS中UIWebView执行JS代码(UIWebView)

iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被人卡出来. 如网页中的这个导航 通常我们不需要WebView中的 导航栏,也不需要里面的返回上一级的交互.. 对WebView常用的另外一种功能就是对某个点击添加对用function实现JS调用OC的交互功能. 下面一一介绍: 1. UIWebView 调用JS代码 OC调用JS通常是,在webVi

iOS中用UIWebView的loadHTMLString后图片和文字失调解决方法

iOS中用UIWebView的loadHTMLString后图片和文字失调,图片过大,超过屏幕,文字太小:或者图片太小,文字太大,总之就是不协调. 我们的需求是让图片的大小跟着屏幕的变化而变化,就是动态的去适应屏幕:那么文字的字体就是我们自己可以控制,可大可小.要想达到这样的效果,我们要在用loadHTMLString加载字符串之前对它进行处理.怎么处理呢?什么原理呢? 处理HTMLString的方法: NSString *htmls = [NSString stringWithFormat:@

iOS修改默认Xcode版本的方法

电脑中装了二个xcode版本,一个是xcode6-beta,一个是xcode5.1.1,每次打开工程时,默认是用xcode6-beta打开.在简介中修改打开方式也没用,没来在stackoverflow中找到答案 After reading about LaunchServices in OS X I have finally found the solution, thanks for the hint @peter-m. To modify files association for cert

iOS—修改AFNetworking源文件可接收text/plain的方法

iOS—修改AFNetworking源文件可接收text/plain的方法 在使用AFNetworking的时候可能会碰到下面的错误: { status code: 200, headers { "Content-Length" = 14; "Content-Type" = "text/plain;charset=utf-8"; Date = "Thu, 22 May 2014 10:37:50 GMT"; Server =