iOS WebView设置UserAgent

在和前端交互过程中,为了区分是我们APP内加载网页还是其他应用或浏览器加载的网页,我们需要使用在UserAgent后追加字符串来区分。下面介绍全局和局部修改UserAgent。

设置全局UserAgent

下面两种方法都可以修改全局UserAgent,因为修改的是系统配置,等于全局公用属性,所以不论使用UIWebView还是WKWebview,修改都是同一个属性。

方法一:WKWebView配置UserAgent

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    self.webView = [[WKWebView alloc] init];
    [self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
        NSString *userAgent = result;
        NSString *newUserAgent = [userAgent stringByAppendingString:@" Appended Custom User Agent"];
        NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
        [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    }];
    
    return YES;
}

注意:WKWebView不能使用局部声明,需要放在类扩展中,否则无效

方法二:UIWebView配置UserAgent

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    UIWebView *webView = [[UIWebView alloc] init];
    NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    NSString *newUserAgent = [userAgent stringByAppendingString:@" Appended Custom User Agent"];
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    
    return YES;
}
  • 方法二放在其他ViewController也是可以使用,webView初始化要放在设置UserAgent后才会生效。
  • 需要注意的是在当前页面销毁后,设置的UserAgen就会失效,如果push或者present后面的页面,UserAgen依然有效。
  • AppDelegate不会销毁以一直有效

设置局部UserAgent

UIWebView *tempWebView = [[UIWebView alloc] init];
NSString *userAgent = [tempWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSString *newUserAgent = [userAgent stringByAppendingString:@" Appended Custom User Agent"];
self.webView.customUserAgent = newUserAgent;
// 下面这句了打印userAgent,可以不要
[self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
    NSLog(@"%@", result);
}];

总结:

  • WKWebView需要等待回调才能设置UserAgent;
  • UIWebView可以直接返回UserAgent效率更高;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,150评论 1 32
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 使用场景: 有个项目需求,要区分打开H5是在本地APP还是在手机浏览器,前端伙伴说需要配合修改默认的UserAge...
    千寻_544f阅读 5,596评论 0 4
  • ----毛虫苑开学篇 现在回想起那日----2017年9月1日,我的心中...
    毛虫苑陈菲阅读 1,025评论 0 3
  • 总难说清一寸的距离 是太远 还是太近 只在你紧锁的愁绪里 难以呼吸 眉飞色舞地高谈电影、音乐 和叫人动情的故事 在...
    洛家仁人阅读 154评论 0 0