gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:20:36 29 4
gpt4 key购买 nike

我正在使用 Qt 中的单选项卡浏览器,但遇到了一个问题:

指向外部网站的网络链接设置为在新选项卡中打开(使用 taget='_blank')。但是,由于我的浏览器只有一个选项卡,因此这些链接根本处于非事件状态。

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

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

最佳答案

创建 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);

关于qt - QWebPage 强制在同一选项卡中打开链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636757/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com