iOS12.0、iOS12.1 WKWebview设置userAgent不生效 解决方案

1 篇文章 0 订阅
1 篇文章 0 订阅

UIWebview切换WKWebview背景:

 apple将会禁用UIWebview,且给到开发者切换WKWebview的deadline为2020年11月。

 原本以为可以无缝切换,还可以带来一波性能提升,可以跟老板吹一下。没想到牛皮刚吹出去,就有海量的bug铺面而来。一部分是由于对WKWebview的特性理解不足,错误调用api导致,另一部分是WKWebview自身的bug(此部分才是最坑的)

WKWebview的特性网上较好的理解:

建议细读,了解完整后再切换

https://www.jianshu.com/p/79e329ff8953

下面介绍一个WKWebview自身的bug:

 WKWebview设置userAgent的方式

[self.wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {


    // modify ua
    self.wkWebView.customUserAgent = @"you custom ua";

}];

在大部分iOS系统上都是可以的,但是在iOS12.0、iOS12.1上面,此方法是行不通的,修改ua不生效。

解决方案:​​​​​​​

iOS12.0、iOS12.1在用navigator.userAgent获取ua后,然后在同一个webview上修改ua是不生效的。你需要一个假的webview获取ua,然后在真正的webview上在原ua的基础上加上customUserAgent

引自stackOverFlow:https://stackoverflow.com/questions/51356476/ios-12-wkwebview-set-customuseragent-not-work

Once you call navigator.userAgent, you can never modify it. So you need a fakeWKWebView to get the default UA and set to you truly WKWebView

self.fakeWKWebView = [[WKWebView alloc] init];

[self.fakeWKWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {
    self.fakeWKWebView = nil;

    // modify ua
    self.wkWebView.customUserAgent = @"you custom ua";

}];

注意点:这个fakeWKWebview必须用self引用或者在block里用到!否则如果它是一个局部变量,执行到block的时候,它的生命周期已经结束,获取到的oldUA是空的。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值