如果你喜欢WKWebView,肯定会遇到需要修改WKWebView的UA的问题,其实WKWebView的UA获取和设置方法与UIWebview没有什么差别,但是你经常会遇到执行完js获取UA的回调,发现获取到的response是nil,怎么办,可以用下面的代码解决,具体的原因可以看代码下面的解释。
WKWebView *tempWebView = [[WKWebView alloc] initWithFrame:CGRectZero];
[tempWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https:www.baidu.com"]]];
[tempWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable response, NSError * _Nullable error) {
NSString *webviewUserAgent = response;
NSArray *array = [webviewUserAgent componentsSeparatedByString:@"version=1.0"];
webviewUserAgent = array.firstObject;
NSDate *date = [NSDate date];
NSTimeInterval interval = date.timeIntervalSince1970;
unsigned long long ti = interval*1000;
NSNumber *timeInterval = [NSNumber numberWithUnsignedLongLong:ti];
NSString *userAgent = [NSString stringWithFormat:@"%@/%@/%@", webviewUserAgent, @"version=1.0", timeInterval];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":userAgent, @"User-Agent":userAgent}];
}];
WKWebView调用evaluateJavaScript方法获取UA或者设置UA时,需在执行loadRequest方法后再调用evaluateJavaScript,否则completionHandler返回值为空。
这样设置完之后,还会有问题,发现第一次访问web页面时,UA还是默认UA,第二次之后才会修改成功,这个问题我也没有解决,最后只能采用UA的获取和设置使用UIWebview的获取和设置方法,这样设置完之后,也会生效,但是这种方法可能会带来其他目前没有发现的问题。