ios修改本地useragent(WKWebView)

1、获取原先的userAgent;

/* @abstract Evaluates the given JavaScript string.
@param javaScriptString The JavaScript string to evaluate.
@param completionHandler A block to invoke when script evaluation completes or fails.
@discussion The completionHandler is passed the result of the script evaluation or an error.
*/
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

这个方法也可以用来解决Native调用JS的问题。

原生js中获取userAgent的方法就是"navigator.userAgent"。

2、修改userAgent;

/*! @abstract The custom user agent string or nil if no custom user agent string has been set.
*/
@property (nullable, nonatomic, copy) NSString *customUserAgent API_AVAILABLE(macosx(10.11), ios(9.0));

WKWebView 类有个customUserAgent属性,赋值即可。

3、UIWebView里面userAgent的修改方法;

由于UIWebView有内存泄露问题,不可控,建议大家也使用WKWebView,替换成本还是很小的。

4、坑;

大多数人,包括网上很多帖子都写了关于wkweb修改useragent的方法,例如

https://www.jianshu.com/p/fd6fe72a3b0e

https://www.jianshu.com/p/5f02451b8e87

这两篇文章是百度搜索的前几个,都提到了修改不生效,“??需要alloc两遍??”,还有人提到“??第一次进入不生效,第二次就ok了??”。

仔细看下来不难发现,WKWebView获取userAgent是个异步block过程,那修改userAgent也是在异步里面完成的,既然修改过程是异步,name使用不得等block回调完成再使用么。

全量代码:

//
//  DocumentViewController.m
//  Project_20171206
//
//  Created by StephenZhu on 2018/5/14.
//  Copyright © 2018年 StephenZhu. All rights reserved.
//

#import "DocumentViewController.h"
#import <WebKit/WebKit.h>
@interface DocumentViewController ()
@property (nonatomic,strong) WKWebView *myWebView;
@end

@implementation DocumentViewController

- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.myWebView];
[self layoutMain];
[self setUserAgent];
}
- (void)layoutMain
{
[self.myWebView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(0);
}];
}
- (void)loadUrl
{
NSString* urlStr = [NSString stringWithFormat:@"http://WWW.BAIDU.COM"];
NSURL *url = [NSURL URLWithString:urlStr];
[self.myWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
NSLog(@"%@",result);
[self.myWebView loadRequest:[NSURLRequest requestWithURL:url]];
}];

}
- (void)setUserAgent
{
[self.myWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
NSString *oldUserAgent = result;
NSString *newUserAgent = [NSString stringWithFormat:@"%@ %@",oldUserAgent,@"TheNewWordForUserAgent/v1.6"];
self.myWebView.customUserAgent = newUserAgent;
[self loadUrl];
}];
}
#pragma mark - lazyload
- (WKWebView *)myWebView
{
if (_myWebView == nil) {
_myWebView = [[WKWebView alloc]initWithFrame:CGRectZero];
}
return _myWebView;
}
@end

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,520评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 百种绰影百种姿, 花中巾帼花中知, 红尘芳踪到处是, 杏林留香生平事. 诗余: 石斛品种繁多而特异, 花香貌美, ...
    王卓族阅读 427评论 0 0
  • 林深时见鹿 谁的眼眸 藏着心动
    阿姝札记阅读 198评论 0 0