Ich arbeite an einem Browser mit einer Registerkarte in Qt und bin auf ein Problem gestoßen:
Die Links im Web, die zu externen Websites führen, sind so eingestellt, dass sie in einer neuen Registerkarte geöffnet werden (mit taget='_blank'). Da mein Browser jedoch nur eine Registerkarte hat, sind diese Links einfach inaktiv.
Ich glaube, dass es möglich ist, die Links zu zwingen, in der gleichen Registerkarte durch Einfügen von JavaScript (QWebFrame::eveluateJavaScript) zu öffnen, aber das scheint eine ineffiziente Lösung zu sein.
Gibt es einen nativen Weg in Qt zu erzwingen, dass alle Links in der gleichen Registerkarte/Fenster zu öffnen?
Edit :
Ich habe eine native Lösung gefunden, indem ich loadFinished(bool) neu implementiert habe:
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");
}
}
}
Wenn es einen noch besseren Weg gibt, würde ich mich freuen, ihn zu sehen.