iOS WebView UserAgent 獲取和設定

HimmaHorde發表於2019-09-12

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 之前被賦值。

相關文章