Zgodnie z dokumentacją loadFinished powinien być emitowany dopiero po zakończeniu ładowania wszystkich elementów strony. To powinno oznaczać, że zostanie wywołane tylko raz, jednak zauważyłem, że w niektórych witrynach, takich jak youtube.com, jest wywoływana dwa razy? Czy istnieje inny sposób obejścia tego błędu lub jaki jest najbardziej niezawodny sposób wykrywania zdarzenia page.load?Dlaczego QWebView.loadFinished jest wywoływany kilka razy w niektórych witrynach, np. youtube?
Oto kod testu:
import sys
from PyQt4 import QtCore, QtGui, QtWebKit
from PyQt4.QtCore import QUrl
from PyQt4.QtGui import QApplication
def onDone(val):
print "Done ...",val
def onStart():
print "Started..."
app = QApplication(sys.argv)
ui = QtWebKit.QWebView()
ui.loadStarted.connect(onStart)
ui.loadFinished.connect(onDone)
ui.load(QUrl("http://www.youtube.com"))
ui.showMaximized()
sys.exit(app.exec_())
Wyjście:
Started...
Done ... True
Started...
Done ... True
Edit: Jest prawie takie same, ale jego question> 2yrs stary i nadal bez odpowiedzi.
Jestem pewien, że dzieje się podczas modyfikowania DOM jak gdyby był to ciąg. –
Wysłałem kod. W jaki sposób DOM zmienia się w tym? Proste ładowanie adresu URL, prawda? –
Jestem pewien, że QWebKit uruchamia kod JS, więc może zmodyfikować DOM po tym, jak był on na Done(). To jest komentarz, a nie odpowiedź. –