4

QtWebkitを使用したシンプルなQtGUIアプリケーションがあります。ネストされたIFRAMEタグがたくさんある複雑なページを読み込んでいます。そして、iframeのコンテンツを含む完全なDOMツリー(Chromeブラウザーがデバッグパネルで行うように)をトラバースしたいと思います。

私のコードは次のとおりです。

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*を取得する必要があります。

ありがとう!

4

2 に答える 2

2

各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
}
于 2012-11-15T12:39:22.597 に答える
0
  • 現在のフレームでセレクターを実行
  • 良いものが返された場合、Web フレームが現在のフレーム上にあることがわかりました。この要素を X と呼びましょう。
    • 現在のページからセレクター「iframe、frame」を使用してすべてのフレーム要素を取得するようになりました
    • これらすべての要素をループして X フレームと一致させようとすると、ドキュメント内の X フレームの正確な INDEX を見つけることができます。
    • 最後に、そのINDEXで子フレームに集中できるようになりました
  • それ以外の場合は、このフレームにセレクターが見つからないことを意味します
    • すべての子フレームをループし、子フレームごとにプロセス全体を繰り返します
于 2015-05-07T21:20:54.937 に答える