WKWebView 设置自定义UserAgent正确姿势

背景

一般Web端通过UA来区分当前浏览器是在PC/Mobile/App内,所以在App内设置UA就是一个必须要做的事情。 

下面介绍三种方式设置WKWebView的UserAgent(没有耐心的可以直接看最下面一种)

1. 通过UserDefaults(目前网上最常见的)

由于WKWebView有一个特性,在初始化时会获取UserDefaults中“UserAgent”这个key的值,这需要我们在真正使用的WKWebView之前要创建一个WKWebView获取他默认的UA

webView = WKWebView();

webView?.evaluateJavaScript("navigator.userAgent", completionHandler: { (obj: Any?, error: Error?) in

  guard let ua = obj as? String else {

        return

    }

    let customUA = "\(ua) Custom User Agent"

    UserDefaults.standard.register(defaults: ["UserAgent": customUA])

    UserDefaults.standard.synchronize()

})

 

2. 通过WKWebView.customUserAgent设置

* 这种方式其实和第一种方式并没有什么差别,而且还比较复杂,因为只对这一个WebView有效

let fakeWebView = WKWebView();

fakeWebView.evaluateJavaScript("navigator.userAgent", completionHandler: { (obj: Any?, error: Error?) in

    guard let ua = obj as? String else {

        return

    }

    let customUA = "\(ua) Custom User Agent"

    let realWebView = WKWebView()

    realWebView.customUserAgent = customUA

})

3. 通过applicationNameForUserAgent设置- 推荐

config的此属性与上一个属性不同,不是将设置的字符串完全变成你所设置的值,

它将字符串集添加到WebView的默认UserAgent并执行它。

这正好就是我们想要的,您所要做的就是设置要添加的字符串。

修改后的UserAgent,如:Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Custom UserAgent

let config = WKWebViewConfiguration()

config.applicationNameForUserAgent = "Custom User Agent"

let webview = WKWebView(frame: .zero, configuration: config)

三种方式系统采用的优先级

customUserAgent > UserDefault > applicationNameForUserAgent

左侧优先级高于右侧

如果设置了customUserAgent或UserDefaults方法,则applicationNameForUserAgent将被忽略。

applicationNameForUserAgent仅添加到了webview具有的默认UserAgent中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值