UIWebView用户代理未正确设置用于自定义值



如果我们想从

更改用户代理的值
Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72

to

Mozilla/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72

即。在iPhone应用程序上,我的应用需要设置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中设置硬编码值,而不是逻辑来操纵字符串看起来像iPad的用户代理

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”])

然后正确设置

有什么想法,这里出了什么问题?

如果您致电以使用JS代码获取iOS浏览器用户代理值,则iOS此时将创建和发送值。因此,创建后您无法更新用户代理。尝试将所有用户代理人手动编写,而无需通过JavaScript打电话:

    let manuelUserAgent = "Mozilla/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72"
    let newUserAgent = "(manuelUserAgent) YourOpt.Text"
    UserDefaults.standard.register(defaults: ["UserAgent": newUserAgent])

有一个有趣的锻炼,它在一个类似的项目中对我有所帮助:

  • 的确,一旦获得HTTP标头的值,您将无法在以后进行修改(是否是错误?)

  • 因此,您无法获得当前值并修改

  • 对于WebView对象的一个实例是正确的。这就是为什么您可以添加一个"隐藏"的时间对象。具有真实值的属性,因此它不会出现在您的GUI中,然后从此对象中获取值,因此您可以在原始对象上进行修改:

     @IBOutlet var tmpWebView: UIWebView!
     @IBOutlet var webview: UIWebView!
     var newAgent = tmpWebView.stringByEvaluatingJavaScript(from: "navigator.userAgent")! + " Added new string"
     UserDefaults.standard.register(defaults: ["UserAgent": newAgent])
    

相关内容

  • 没有找到相关文章

最新更新