美文网首页iOS老中医
WKWebView获取UA以及更改UA的坑

WKWebView获取UA以及更改UA的坑

作者: 地上的 | 来源:发表于2019-01-04 16:44 被阅读285次

    最近有webView的相关需求,需要更改UA来适应我们的前端,但是又得保留原本的UA,所以不能直接覆盖,得追加字段,这个过程中WKWebView坑就比较多,列数一下。

    UIWebView更改UA

    UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectZero];
        NSString *ua = [webview stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
        if (ua) {
            NSArray *uaComps = [ua componentsSeparatedByString:@" "];
            if ([uaComps containsObject:@"Marble"] == NO) {
                ua = [ua stringByAppendingString:@" Marble"];
                [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent": ua}];
                [[NSUserDefaults standardUserDefaults] synchronize];
            }
        }
    

    UIWebView很简单就处理完毕,坑多的是WK。

    WKWebView

    先上完整版:

        _webview = [[WKWebView alloc] init];
        
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"www.allhistory.com"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
        [_webview loadRequest:request];
        [_webview evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
            NSString *userAgent = result;
            NSArray *stringArray = [userAgent componentsSeparatedByString:@" "];
            if ([stringArray containsObject:@" marble"]) {
                return;
            }
            NSString *newUserAgent = [userAgent stringByAppendingString:@" marble"];
            NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
            [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }];
    
    

    坑:
    1、wkwebview必须要先loadrequest,才能获取和设置成功;
    2、由于获取是异步的,所以得持有这个webview,不然过了这个方法的生命周期,webview就被释放了,取到的resultnil。所以把webview作为属性持有起来;
    3、最后设置完毕别忘了synchronize同步一下。

    相关文章

      网友评论

        本文标题:WKWebView获取UA以及更改UA的坑

        本文链接:https://www.haomeiwen.com/subject/ealkrqtx.html