美文网首页
iOS之解决iOS12.0、12.1设置userAgent失败问

iOS之解决iOS12.0、12.1设置userAgent失败问

作者: 枫叶无处漂泊 | 来源:发表于2020-05-09 14:04 被阅读0次

    背景

    Apple公司将会禁用UIWebview,且给到开发者切换WKWebview的截止日期为2020年11月。由于彻底替换WKWebView,所以避免不了产生好多问题,下面说的就是WKWebView自身的bug。

    问题

    在iOS12.0、12.1系统下,WKWebview设置userAgent是行不通的,前端获取的userAgent还是系统的,并没有获取自定义的。导致原生和h5的交互不生效。其它版本暂未发现,12.2、12.4都是正常的,看来苹果及时修复了这个问题。

    代码如下:

    //在iOS12.0、12.1通过执行JS的navigator.userAgent更新userAgent不生效
    [self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError * _Nullable error) {
        newUserAgent = [userAgent stringByAppendingString: customUserAgent];
        if (@available(iOS 9.0, *)) {
            [self.webView setCustomUserAgent:newUserAgent];
        } else {
             [self.webView setValue:newUserAgent forKey:@"applicationNameForUserAgent"];
        }    
    }];
    
    

    解决方案

    就是使用的临时的webview来执行JS的navigator.userAgen,在block里面使用自己的webview去修改userAgent。

    self.fakeWebview = [WKWebview new];
    [self.fakeWebview evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError * _Nullable error) {
        newUserAgent = [userAgent stringByAppendingString: customUserAgent];
        if (@available(iOS 9.0, *)) {
            [self.webView setCustomUserAgent:newUserAgent];
        } else {
             [self.webView setValue:newUserAgent forKey:@"applicationNameForUserAgent"];
        }    
    }];
    
    • self.fakeWebview来执行JS的navigator.userAgent,影响在12.1、12.0影响fakeWebview,并不影响self.webview.
    • self.webview可以获取到self.fakeWebview执行系统的userAgent并且不影响self.webview设置自定义的userAgent。
    • self.fakeWebview 使用的全局的主要因为如果它是一个局部变量,执行到block的时候,它的生命周期已经结束,获取到的result是空的。

    相关文章

      网友评论

          本文标题:iOS之解决iOS12.0、12.1设置userAgent失败问

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