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