我正在使用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");
}
}
}
如果有更好的方法,我会很高兴看到它。
答案 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);