2

我正在使用 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");
        }
    }
}

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

4

1 回答 1

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);
于 2014-03-10T00:43:43.843 回答