美文网首页iOS 的那些事儿
WKWebView 设置自定义UserAgent正确姿势

WKWebView 设置自定义UserAgent正确姿势

作者: 有点特色 | 来源:发表于2020-06-10 15:49 被阅读0次

    背景

    一般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中。

    相关文章

      网友评论

        本文标题:WKWebView 设置自定义UserAgent正确姿势

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