iOS WebView UserAgent 获取和设置

9,233 阅读1分钟

UA 的获取

通过 UIWebView 获取

UIWebView().stringByEvaluatingJavaScript(from: "navigator.userAgent")

通过 WKWebView 异步获取

webView.evaluateJavaScript("navigator.userAgent") { (result, error) in
    if error != nil {
        print("error = \(error)")
    } else {
        print("result = \(result)")
    }
}

网上有说 WKWebView 可能会出现获取不到 UA 的情况,没遇到。

不过由于 WK 执行 JS 方法是异步的,如果 WK 被提前释放会报一下错误,需要注意下。

WKWebView.init().evaluateJavaScript("navigator.userAgent") { (result, error) in
    if error != nil {
        print("error = \(error)")
    } else {
        print("result = \(result)")
    }
}
<!--报错信息-->
Error Domain=WKErrorDomain Code=3 "The WKWebView was invalidated" UserInfo={NSLocalizedDescription=The WKWebView was invalidated}

UA 设置

全局 UA 设置

UserDefaults.standard.register(defaults: ["UserAgent": "我是新的 UA"])

使用很简单一行代码设置,最好放在application didFinishLaunchingWithOptions 中调用,可配合获取 UA 设置适合自己的新 UA。

简单不,可惜 iOS 12 之后就有问题了!!!!

适用范围

  • UIWebView && iOS 9+
  • WKWebView && iOS [9, 12)

iOS 12 之后 WKWebView 的 UA 设置

关键代码

/** @abstract The custom user agent string or nil if no custom user agent string has been set.
*/
@available(iOS 9.0, *)
open var customUserAgent: String?

使用

webView.customUserAgent = "自定义 UA"

注意事项 设置 customUserAgent 需要在 loadRequest 和 evaluateJavaScript 之前被赋值。