WKWebView获取和设置UA

如果你喜欢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的获取和设置方法,这样设置完之后,也会生效,但是这种方法可能会带来其他目前没有发现的问题。

你可能感兴趣的:(WKWebView获取和设置UA)