WKWebView 設(shè)置自定義UserAgent正確姿勢

背景

一般Web端通過UA來區(qū)分當(dāng)前瀏覽器是在PC/Mobile/App內(nèi),所以在App內(nèi)設(shè)置UA就是一個必須要做的事情。?

下面介紹三種方式設(shè)置WKWebView的UserAgent(沒有耐心的可以直接看最下面一種)

1. 通過UserDefaults(目前網(wǎng)上最常見的)

由于WKWebView有一個特性,在初始化時會獲取UserDefaults中“UserAgent”這個key的值,這需要我們在真正使用的WKWebView之前要創(chuàng)建一個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設(shè)置

* 這種方式其實和第一種方式并沒有什么差別,而且還比較復(fù)雜,因為只對這一個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設(shè)置- 推薦

config的此屬性與上一個屬性不同,不是將設(shè)置的字符串完全變成你所設(shè)置的值,

它將字符串集添加到WebView的默認UserAgent并執(zhí)行它。

這正好就是我們想要的,您所要做的就是設(shè)置要添加的字符串。

修改后的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)

三種方式系統(tǒng)采用的優(yōu)先級

customUserAgent > UserDefault > applicationNameForUserAgent

左側(cè)優(yōu)先級高于右側(cè)

如果設(shè)置了customUserAgent或UserDefaults方法,則applicationNameForUserAgent將被忽略。

applicationNameForUserAgent僅添加到了webview具有的默認UserAgent中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容