В iOS отсутствуют данные POST в URLRequest как минимум до 10.3 - PullRequest
0 голосов
/ 24 августа 2018

Веб-представление с данными POST не отправляет тело, поэтому я пропускаю обязательные параметры веб-представления. В последующих версиях работает нормально, но не работает с 9.1.

Вот как я настраиваю свое веб-представление:

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... и затем печатаю описание запроса, я замечаю, что запросы от более поздних и более ранних версий совпадают, за исключением некоторых ожидаемых байтов, которые меняются из-за токена сеанса на устройство. Диапазон - это точный диапазон, который я ожидаю отличить.

1 Ответ

0 голосов
/ 24 августа 2018

Ах, похоже, это ошибка в Web Kit, которая была исправлена ​​в iOS 11 ... довольно серьезная ошибка, удивленная, что они не исправили бы ее в более ранних версиях.

Я действительно надеялся использовать WKWebView вместо UIWebView для повышения производительности JavaScript, но, похоже, мне придется согласиться.

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

Чтобы добавить это, я решил эту проблему, добавив экземпляр var, var webView:UIView, и в viewDidLoad я сделал это:

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

Изменил свой ленивый var WKWebView на _webView, добавил _webView2Ленивый var, как UIWebView, и реализовал делегаты для обоих.Таким образом, более поздние пользователи iOS получают преимущества производительности WKWebView без необходимости увеличения минимального целевого значения до 11.0 и потери пользователей iOS 9-10.

...