QWebEngine:如何获取属性值?

时间:2016-01-09 13:08:18

标签: c++ qt

我想将QWebView中写入的项目重写为QWebEngineView,但我不知道如何获取属性值并将其分配给C ++变量。我认为我应该使用QWebEnginePage::runJavaScript函数。但我不知道如何。

例如,当我尝试在控制台中显示元素的值时,我这样做了:

web->page()->runJavaScript("document.getElementById(\"login\").getAttribute(\"va‌​lue\")", []
(QVariant result)->void {
    qDebug()<<result.toString();
});

但它没有显示任何内容。

5 个答案:

答案 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").va‌​lue

另外我建议使用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");

只需添加回调作为第二个参数即可获取值。我希望这会对你有所帮助。