我正在将一个内部浏览器从QtWebKit移植到QtWebEngine。
我想要一个函数来请求网址,同时张贴一些数据。对于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相同的功能呢?
谢谢
发布于 2016-10-01 06:07:21
我的解决方案是使用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);可选的最后一个参数(这里没有显示)是一个lambda函数,它在JavaScript函数退出并接收最后一个值输出时执行。
文档对这个主题并不清楚,但我认为这个函数是从主线程异步执行的-否则你只会阻塞执行并等待,而不是传递一个可选的lambda/functor/ function指针供以后执行。
https://stackoverflow.com/questions/35104768
复制相似问题