UserAgent获取与修改

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

本文讨论了在iOS应用中使用WKWebView替代UIWebView的问题,并介绍了使用WKWebView获取和设置UserAgent的实践方法。文章提到了通过搜索项目代码和查看SDK来确定是否使用了UIWebView,然后介绍了几种修正UserAgent的方法,包括使用UserDefaults和WKWebView的customUserAgent和applicationNameForUserAgent属性。最后,文章提到了在iOS 17和Xcode 15中使用NSUserDefault方法修正UserAgent的问题,并给出了注意事项。

🔎

延伸解读

三种UA修改方法的优先级与选择

文章指出,customUserAgent、UserDefaults和applicationNameForUserAgent三种方法存在优先级:customUserAgent > UserDefaults > applicationNameForUserAgent。若设置了前两者,applicationNameForUserAgent会被忽略。applicationNameForUserAgent仅将字符串追加到默认UA中,而customUserAgent会完全替换UA。开发者应根据需求选择:若需完全自定义,用cus

iOS 17下UserDefaults方法失效的应对

在iOS 17和Xcode 15打包的应用中,通过NSUserDefaults修改UA的方法可能失效,前端获取的UA不包含自定义部分。文章建议此时改用其他两种方法:customUserAgent或applicationNameForUserAgent。这提醒开发者,在适配新系统时需注意API行为变化,及时调整实现方案,避免因UA修改失败影响H5页面功能。

修改UA时必须注意的关键细节

文章强调,修改UA必须在loadRequest之前进行,否则可能导致第一次不生效。同时,获取并修改UA的webView应与加载网页的webView为不同实例,否则在iOS 8及以后可能设置失败。此外,WKWebView的创建和evaluateJavaScript执行必须在主线程操作。这些细节是确保UA修改成功的关键,开发者需严格遵循。

❓

Q&A

为什么Apple建议开发者使用WKWebView替代UIWebView?

Apple自2019年起建议开发者将UIWebView替换为WKWebView,以提高应用的性能和安全性。

如何确认项目中是否使用了UIWebView?

可以通过搜索项目代码,使用终端命令'grep -r UIWebView .'来查找是否包含UIWebView的代码。

在iOS中如何获取WKWebView的UserAgent?

可以通过调用'webView.evaluateJavaScript("navigator.userAgent", completionHandler:)'来异步获取WKWebView的UserAgent。

有哪些方法可以修正WKWebView的UserAgent?

修正WKWebView的UserAgent的方法包括通过UserDefaults、customUserAgent属性和applicationNameForUserAgent属性。

在iOS 17和Xcode 15中修正UserAgent时需要注意什么?

在iOS 17和Xcode 15中,NSUserDefaults方法可能会出现问题,建议使用其他方法修正UserAgent。

修正UserAgent的操作应该在何时进行?

修正UserAgent的操作必须在loadRequest之前进行,以确保第一次生效。

➡️

继续阅读