WKWebView用户代理(Swift)

11

我试图使用 Swift 从 WKWebView 获取用户代理:

let webView = WKWebView(frame: .zero) useragentlabel.text = webView.configuration.applicationNameForUserAgent

但它返回 Mobile/15E148,这可能是用户代理吗?

谢谢。

3个回答

21
快速、同步的方法,没有闭包,已经测试过Swift 5、iOS 15和iOS 16。
let UA = WKWebView().value(forKey: "userAgent")

UA的值(可选)为:

Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

适用于iPhone XS模拟器上的iOS 13.5。

此项已通过App Store审核。


2
比起使用异步JS的其他答案,这个要好得多! - Alain Stulz
1
太好了,谢谢!如果有人还需要的话,这是Objective-C版本: NSString *userAgent = [[WKWebView new] valueForKey:@"userAgent"]; - Ricardo Barroso
4
请注意,上面的解决方案使用了未记录的API,因此它可能随时停止工作。执行JS不太方便,但似乎更可靠。 - qbba.lys

8
[self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable result, NSError * _Nullable error) {

 }];

结果是用户代理(userAgent)。

1
是的,谢谢。在Swift中:webViewForUserAgent = WKWebView() // 必须初始化 webViewForUserAgent?.evaluateJavaScript("navigator.userAgent") { (result, error) in if error != nil { print("获取userAgent时出错") return } if let unwrappedUserAgent = result as? String { UserAgent=unwrappedUserAgent } else { print("无法获取userAgent") } } - Afatsum
4
这里非常重要的一点是,当任何人在WKWebView中遇到“web view is invalidated”的错误时,可能会发生你正在方法内初始化WKWebView,并且在此之后立即执行上述JavaScript代码时会出现无效错误。因此,解决此问题需要创建WKWebview的全局引用,然后在方法内评估java script,这样就可以得到正确的值而没有错误。 - Sagar Daundkar
在我的情况下,result 是空的,而 [webView valueForKey:@"userAgent"]) 返回了值。为什么?我更喜欢使用 js 脚本方法,因为 valueForKey 可能会崩溃。 - JsW

-8

这个代码获取用户代理:

let userAgent = webView.customUserAgent!

2
如果没有设置自定义的用户代理字符串,则此选项将设置为 nil。https://developer.apple.com/documentation/webkit/wkwebview/1414950-customuseragent - Afatsum
这不会为用户代理提供默认值。 - Sagar Daundkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接