我将内部浏览器从QtWebKit移植到QtWebEngine。
我想要一个函数在发布一些数据时请求url。 使用WebKit,我可以使用以下内容:
使用从QtWebView派生的类WebView:
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具有相同的功能?
由于
答案 0 :(得分:1)
我的解决方案是使用QWebEnginePage::runJavaScript()编写登录脚本,而不是模拟后期操作。
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参数(此处未显示)是一个lambda函数,在JavaScript函数退出并接收最后一个值时执行。
关于这个主题的文档不清楚,但我认为该函数是从主线程异步执行的 - 否则你只会阻止执行并等待,而不是传入一个可选的lambda / functor / function-pointer来执行。