QtWebEngine: загрузка URL с HTTPPost

Я портирую внутренний браузер с QtWebKit на QtWebEngine.

Я хочу, чтобы функция запрашивала URL при публикации некоторых данных. С WebKit я мог бы использовать следующее:

С классом WebView, полученным из QtWebView:

void WebView::loadPostUrl(const QUrl &url, QByteArray postdata)
{
    m_initialUrl = url;
    QNetworkRequest request = QNetworkRequest(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    load(request, QNetworkAccessManager::PostOperation, postdata);
}

Поскольку QtWebEngine взаимодействует с QNetworkAccessManager, как мы можем использовать те же функции, что и QtWebEngine?

Спасибо

1 ответ

Моим решением было использование QWebEnginePage::runJavaScript() для сценария входа в систему вместо симуляции операции Post.

QString strLoginScript(
    "var formElts = document.getElementById('formSignIn').elements;"
    "formElts['inputLoginName'].value = '%1';"
    "formElts['inputPassword'].value = '%2';"
    "formElts['btnSignIn'].click();")
    .arg(strUsername)
    .arg(strPassword);

// execute JavaScript code on current page
webEngineView->page()->runJavaScript(strLoginScript);

Необязательный параметр last (здесь не показан) - это лямбда-функция, которая выполняется, когда ваша функция JavaScript завершает работу и получает последнее значение вывода.

Документация не ясна по этому вопросу, но я думаю, что функция выполняется асинхронно из основного потока - в противном случае вы просто заблокируете выполнение и ждете, вместо того, чтобы передавать необязательный лямбда / функтор / указатель на функцию для выполнения позже.

Другие вопросы по тегам