QWebPage强制在同一个选项卡中打开链接

时间:2011-07-09 18:45:49

标签: qt browser qwebview qwebpage

我正在使用Qt中的一个标签浏览器,我遇到了一个问题:

网络上指向外部网站的链接设置为在新标签中打开(使用taget ='_ blank')。但是,由于我的浏览器只有一个标签,因此这些链接无效。

我相信通过注入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");
        }
    }
}

如果有更好的方法,我会很高兴看到它。

1 个答案:

答案 0 :(得分:3)

创建QWebPage的子类,并覆盖createWindow()。最简单的方法如下:

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

并且,将上面的网页设置为webview,如下所示:

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