【问题标题】:iOS missing POST data in URLRequest at least prior to 10.3iOS 至少在 10.3 之前的 URLRequest 中缺少 POST 数据
【发布时间】:2018-08-24 14:43:22
【问题描述】:

带有 POST 数据的 Web 视图不会 POST 正文,因此我缺少 Web 视图的必需参数。它在以后的版本中运行良好,但不适用于 9.1。

这是我设置 web 视图的方式:

lazy var webView:WKWebView = {
    let view = WKWebView()
    let url:URL = URL(string:<MyURL>)!
    let body:String = String(format: "param1=%@&param2=%@", arguments: [getParam1(), getParam2()])
    var request = URLRequest(url:url)
    request.httpMethod = "POST"
    request.httpBody = body.data(using: .utf8)
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
    view.navigationDelegate = self
    view.load(request)
    view.backgroundColor = .white
    view.scrollView.delegate = self;
    return view
}()

当我创建body 时,我已经确认我的参数存在。我进入该页面,但它显示有关缺少两个参数的错误消息。

知道如何使用旧版本进行此操作吗?

编辑:当我在view.navigationDlegate... 行添加断点然后打印请求的描述时,我注意到来自更高版本和更早版本的请求是相同的,除了一些预期字节由于会话令牌而改变设备。范围是我期望不同的确切范围。

【问题讨论】:

    标签: ios swift post nsurlrequest urlrequest


    【解决方案1】:

    啊,这似乎是 iOS 11 中修复的 Web Kit 的一个错误……相当大的错误,很惊讶他们不会在早期版本中修补它。

    我真的希望使用 WKWebView 而不是 UIWebView 以获得更好的 javascript 性能,但看起来我必须解决。

    https://bugs.webkit.org/show_bug.cgi?id=167131

    为了补充,我通过添加实例变量var webView:UIView 解决了这个问题,在viewDidLoad 中,我这样做了:

    if #available(iOS 11.0, *) {
        webView = _webView
    }
    else {
        webView = _webView2
    }
    

    将我的 WKWebView 惰性变量更改为 _webView,将 _webView2 惰性变量添加为 UIWebView,并为两者实现了委托。这样,以后的 iOS 用户就可以获得 WKWebView 的性能优势,而不必将最低目标提高到 11.0 并失去 iOS 9-10 用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-05
      • 2017-08-25
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      相关资源
      最近更新 更多