我有使用QtWebkit的简单Qt GUI应用程序。我正在加载带有大量嵌套IFRAME标签的复杂页面。而且我想遍历完整的DOM树(就像Chrome浏览器在调试面板中所做的那样),包括iframe的内容。

我的代码是:

QWebElement doc = ui->webView->page()->mainFrame()->documentElement();
QWebElement iframe = doc.findFirst("iframe[id=someid]");
QWebFrame *webFrame = ....? // how to get the QWebFrame for an iframe/frame QWebElement?


注意:
我可以遍历所有框架(包括嵌套框架):

void MainWindow::renderFramesTree(QWebFrame *frame, int indent)
{
    QString s;
    s.fill(' ', indent * 4);
    ui->textLog->appendPlainText(s + " " + frame->frameName());
    foreach (QWebFrame *child, frame->childFrames())
        renderFramesTree(child, indent + 1);
}


但是我的问题不是这个。我需要获取iframe-QWebElement的相应QWebFrame *。

谢谢!

最佳答案

每个QWebFrame都有QList<QWebFrame *> QWebFrame::childFrames () const方法。每个帧也具有QString QWebFrame::frameName () const。两者结合可以使您找到需要的东西。

QWebFrame * frameImLookingFor = NULL;
foreach(QWebFrame * frame, ui->webView->page()->mainFrame()->childFrames())
{
    if (frame->frameName() == QLatin1String("appFrame"))
    {
        frameImLookingFor = frame;
        break;
    }
}

if (frameImLookingFor)
{
    // do what you need
}

09-28 03:03