Когда страница запрашивает создание нового окна, вызывается createWindow(WebWindowType)
; если метод не возвращает новое представление QWeb [Engine] (или не реализовано по умолчанию), аналогичный метод вызывается для представления; опять же, если это не реализовано, ничего не происходит.
Если вы хотите загрузить новое окно в том же самом, что было запрошено, просто переопределите WebView и верните self
и включите поддержку открытия нового windows из javascript:
class SelfishWebView(QWebView):
def createWindow(self, windowType):
return self
class MainForm(QtWidgets.QMainWindow):
# ...
def loadUrl(self, url):
self.view = SelfishWebView()
self.view.page().settings().setAttribute(
QWebSettings.JavascriptCanOpenWindows, True)
# ...
Обратите внимание, что если вы выполните javascript таким образом, он попытается рекурсивно вызвать снова, как только будет загружена новая страница (и, поскольку существует кнопка на этой новой странице, она будет пытаться нажать на нее); Вы должны отключить сигнал, как только он будет загружен в первый раз.
def _on_load_finished(self, ok):
self.view.loadFinished.disconnect(self._on_load_finished)
# ...