のために設定されていません我々はiPhoneアプリでのUIWebViewのUser-Agentが正しくカスタム値
Mozilla/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72
すなわちに
Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72
からユーザーエージェントの値を変更したい場合は、私のアプリは、設定する必要がありますiPadのユーザーエージェント。
私のコードは
のUser-AgentがI場合は、iPadのユーザエージェントのように見えるように文字列を操作する代わりに、ロジックのデフォルト値を設定し、保持されていない上記の場合
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
var userAgent:String = ""
override func viewDidLoad() {
super.viewDidLoad()
userAgent = self.webView.stringByEvaluatingJavaScript(from: "navigator.userAgent")!
let range = userAgent.range(of: "iPhone")
if range != nil {
userAgent = userAgent.replacingCharacters(in: range!, with: "iPad")
userAgent = userAgent.replacingOccurrences(of: "iPhone", with: "")
}
userAgent = userAgent.replacingOccurrences(of: " ", with: " ")
UserDefaults.standard.register(defaults: ["UserAgent": userAgent])
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.webView.loadRequest(URLRequest(url: URL(string: "http://www.google.com")!))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let userAgent = request.allHTTPHeaderFields!["User-Agent"]
print("\(userAgent)")
return true
}
}
のように見えます変更してviewDidLoadのハードコーディングされた値を
UserDefaults.standard.register(defaults: ["UserAgent": “Mozilla/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72”])
のように設定してください。
しかし、私は
UserDefaults.standard.register(defaults: ["UserAgent": “MyValue”])
のようなハードコードは、それが適切に
任意のアイデアを設定した場合、何が間違ってここに行きましたか?
はい、これは正しい、それが働きました。 Webビューを初期化する前に、ユーザーエージェントをユーザーデフォルトに設定する必要があることを理解してください。ありがとう。それでも、それぞれのデバイスにはユーザーエージェントの文字列が若干異なるため、iPhone文字列をiPad文字列に変更する必要があり、残りはユーザーエージェント値に設定されているデフォルトと同じです。 – Jay
符号化によって、別のデバイス値で文字列を変更することはできません。ブラウザは常にユーザーエージェントの値を更新しているためです。だからあなたは手動でiphoneやipadの値を設定する必要があります。デバイス検出用:https://stackoverflow.com/a/24059373/3116663 – agenc