2 Stimmen

QWebPage erzwingt das Öffnen von Links in derselben Registerkarte

Ich arbeite an einem Browser mit einer Registerkarte in Qt und bin auf ein Problem gestoßen:

Die Links im Web, die zu externen Websites führen, sind so eingestellt, dass sie in einer neuen Registerkarte geöffnet werden (mit taget='_blank'). Da mein Browser jedoch nur eine Registerkarte hat, sind diese Links einfach inaktiv.

Ich glaube, dass es möglich ist, die Links zu zwingen, in der gleichen Registerkarte durch Einfügen von JavaScript (QWebFrame::eveluateJavaScript) zu öffnen, aber das scheint eine ineffiziente Lösung zu sein.

Gibt es einen nativen Weg in Qt zu erzwingen, dass alle Links in der gleichen Registerkarte/Fenster zu öffnen?

Edit :

Ich habe eine native Lösung gefunden, indem ich loadFinished(bool) neu implementiert habe:

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");
        }
    }
}

Wenn es einen noch besseren Weg gibt, würde ich mich freuen, ihn zu sehen.

3voto

sonyapple Punkte 31

Erstellen Sie die Unterklasse von QWebPage und überschreiben Sie createWindow(). Der einfachste Weg ist wie folgt:

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

Und setzen Sie die obige Webseite auf Webview wie folgt:

// QWebView Setting
ui->webView->setPage(new CustomWebPage());
ui->webView->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
ui->webView->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X