我有UIWebView,我需要更改Navigator userAgent属性。
对于iOS版本10+以下代码完美运行:
func webViewDidFinishLoad(_ webView: UIWebView) {
let script = "window.navigator.__defineGetter__('userAgent', function() " +
"{ return '+keys +thatIs +neededTo +add'; });"
webView.stringByEvaluatingJavaScript(from: script)
}
但是对于iOS9,这不起作用。
有谁有想法吗?
在Info.plist中,我将NSAllowsArbitraryLoads
设置为true。
答案 0 :(得分:1)
需要在UserDefaults中设置用户代理。 您可以使用以下代码进行设置。
func setUserAgent(as userAgentString: String) {
UserDefaults.standard.register(defaults: ["UserAgent": userAgentString])
}
用法:
let userAgentString = "USER AGENT STRING HERE"
setUserAgent(as: userAgentString)
编辑:
我看到你想要将一些字符串附加到当前的UserAgent。 为此,您需要读取当前用户代理的值,存储它,添加自定义字符串,然后存储新的用户代理。用法保持不变。
func setUserAgent(as value: String) {
let webView = UIWebView(frame: CGRect(width: 0, height: 0))
let defaultUserAgentString = webView.stringByEvaluatingJavaScript(from: "navigator.userAgent")
UserDefaults.standard.register(defaults: ["UserAgent": defaultUserAgentString + " " + value])
// remove the " " space if you don't need it
}
编辑2:
是的,更改它会更改整个应用中的所有网络视图。为了避免这种情况,你可以......
func setUserAgent(as value: String) {
let webView = UIWebView()
Constants.defaultUserAgentString = webView.stringByEvaluatingJavaScript(from: "navigator.userAgent") ?? ""
UserDefaults.standard.register(defaults: ["UserAgent": defaultUserAgentString + " " + value])
}
func resetUserAgent() {
if let defaultString = Constants.defaultUserAgentString {
UserDefaults.standard.register(defaults: ["UserAgent": defaultString])
}
}
Constants
这里是一个用于存储全局常量的结构/类,如果有的话,可以用自己的struct / class替换它。只需添加静态变量defaultUserAgentString
即可跟踪默认用户代理。
完成后,使用resetUserAgent()
切换回默认用户代理。可能会在处理需要修改后的用户代理的viewWillDisappear(
的{{1}}上将其添加到ViewController
)。