2

Qt で 1 つのタブのブラウザーを使用していますが、問題が発生しました。

外部 Web サイトにつながる Web 上のリンクは、新しいタブで開くように設定されています (taget='_blank' を使用)。ただし、私のブラウザにはタブが 1 つしかないため、これらのリンクは非アクティブになっています。

JavaScript (QWebFrame::eveluateJavaScript) を挿入することで、リンクを同じタブで強制的に開くことができると思いますが、それは非効率的な解決策のようです。

すべてのリンクを強制的に同じタブ/ウィンドウで開くようにする Qt のネイティブな方法はありますか?

編集:

loadFinished(bool) を再実装することでネイティブな方法を思いつきました:

void MyBrowser::loadFinished(bool ok) {
    if (!ok) {
        return;
    }

    QWebFrame* frame = webView->page()->mainFrame();
    if (frame!=NULL) {
        QWebElementCollection collection = frame->findAllElements("a[target=_blank]");
        foreach (QWebElement element, collection) {
            element.setAttribute("target", "_self");
        }
    }
}

もっと良い方法があれば、私はそれを見てうれしいです。

4

1 に答える 1

3

QWebPage のサブクラスを作成し、createWindow() をオーバーライドします。最も簡単な方法は次のとおりです。

QWebPage* CustomWebPage::createWindow(WebWindowType type)
{
    return this;
}

そして、上記の Web ページを次のように webview に設定します。

// QWebView Setting
ui->webView->setPage(new CustomWebPage());
ui->webView->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
ui->webView->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
于 2014-03-10T00:43:43.843 に答える