QWebPage заставляет открыть ссылку в той же вкладке - PullRequest
2 голосов
/ 09 июля 2011

Я работаю в браузере с одной вкладкой в ​​Qt и столкнулся с проблемой:

Ссылки в Интернете, которые ведут на внешние веб-сайты, открываются в новой вкладке (с помощью taget = '_ blank'). Однако, поскольку в моем браузере есть только одна вкладка, эти ссылки просто неактивны.

Я полагаю, что можно заставить ссылки открываться на одной вкладке, добавив JavaScript (QWebFrame :: eveluateJavaScript), что кажется неэффективным решением.

Есть ли в Qt собственный способ заставить все ссылки открываться в одной вкладке / окне?

Edit:

Я придумал собственный способ, заново реализовав 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");
        }
    }
}

Если есть еще лучший способ, я буду рад это увидеть.

1 Ответ

3 голосов
/ 10 марта 2014

Создайте подкласс QWebPage и переопределите createWindow ().Самый простой способ заключается в следующем:

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

И, установите над веб-страницей веб-просмотр следующим образом:

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