我想将QWebView
中写入的项目重写为QWebEngineView
,但我不知道如何获取属性值并将其分配给C ++变量。我认为我应该使用QWebEnginePage::runJavaScript
函数。但我不知道如何。
例如,当我尝试在控制台中显示元素的值时,我这样做了:
web->page()->runJavaScript("document.getElementById(\"login\").getAttribute(\"value\")", []
(QVariant result)->void {
qDebug()<<result.toString();
});
但它没有显示任何内容。
答案 0 :(得分:0)
我相信您可以通过将广告位连接到loadFinished
的{{1}}信号来获取元素的价值。代码应如下所示。
QWebView
此方法很简洁,您甚至可以在SLOT开头添加网址检查,只有当信号来自您感兴趣的网址时才会继续。
编辑:我刚刚重新阅读了您的问题,发现您希望使用void WebView::onPageLoadFinished(bool status)
{
if(status)
{
QVariant value;
QWebFrame* frame = this->page()->currentFrame();
if (frame!=NULL)
{
QWebElement element = frame->findFirstElement("input[id=login]");
value = element.attribute("value");
}
//In your case you can set a class variable instead of local variable value
}
}
来实现它。我不确定是否可以在那里完成。根据{{3}}页面,您无法访问内部元素。我很想知道是否有工作。
答案 1 :(得分:0)
runJavaScript肯定会做到这一点:这是一个使用纯Javascript与名为“ email”的字段进行交互的功能示例:
// This will set the value
this->_view->page()->runJavaScript(
"document.querySelector('input[name=\"email\"]').value = \"JKLJKLJKL\";"
);
// This will retrieve the value
this->_view->page()->runJavaScript(
"document.querySelector('input[name=\"email\"]').value;",
[](const QVariant &result){
qDebug() << "Value is: " << result.toString() << endl;
}
);
请记住,QVariant的范围仅限于回调,如果您需要在函数外部使用返回的值,则需要传递一个变量,该变量将一直存在直到调用回调为止在[]。
答案 2 :(得分:-1)
可以直接访问JS中的DOM属性/属性:
document.getElementById("login").value
另外我建议使用jQuery(看看fancybrowser示例)。登录输入的设置/获取值的代码是:
if( qt.jQuery( 'input#login' ).length ) // can be omitted if you are sure that DOM element is ready
{
qt.jQuery( 'input#login' ).attr( 'value', currentUserName ); //-- set value
return qt.jQuery( 'input#login' ).attr( 'value' ); //-- get
}
答案 3 :(得分:-1)
这很好用。
_view->page()->runJavaScript("document.querySelector(input[name=\"email\"]).value");
只需将回调添加为第二个参数即可。我希望这会对你有所帮助。
答案 4 :(得分:-1)
这很好用。
_view->page()->runJavaScript("document.querySelector(input[name=\"email\"]).value");
只需添加回调作为第二个参数即可获取值。我希望这会对你有所帮助。