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