Hallo,
ich habe ein Qt-Programm, das im Grunde nur ein Browser für eine ganz spezielle Seite ist. Diese Seite lade ich in eine QWebPage (angezeigt in einem QWebView) und manipuliere sie ziemlich stark. Unter anderem will ich auch z.B. alle Klicks auf Buttons abfangen. Um das zu erreichen, packe ich per button.setAttribute("onsubmit", js); eigenen Javascript-Code in das onsubmit-Event des Formulars und rufe darin einen Slot auf, deren Klasse ich vorher per addToJavaScriptWindowObject bekannt gemacht habe. Soweit funktioniert dann auch alles...
Diese Buttons sind leider alle in Bereichen der Webseite, die ab und zu per AJAX neu geladen werden. Ist absolut grausam, aber leider habe ich keinen Einfluß auf den Quellcode der Seite. Meine Lösung im Moment ist, dass ich das onsubmit-Event einfach alle 10ms neu setze, um ja keinen Klick zu verpassen. Ist natürlich mehr als unschön...
Jetzt kann ich mir ja von der QWebPage den QNetworkAccessManager holen und auf das finished-Event warten. Das wird auch jedes Mal schön gefeuert, wenn ein Teil der Seite neu geladen wird, aber natürlich BEVOR es angezeigt wird. Das hilft mir also auch nur bedingt weiter, da ich an der Stelle ja auch keinen Einfluß mehr auf die Antwort des Servers habe, diese aber auch noch nicht auf der Webseite zu sehen ist.
Hat vielleicht einer von Euch eine Idee, wie ich dieses Problem sauber lösen könnte? Danke!
Gruss,
fallen
Änderungen in QWebPage bemerken
-
The_Fallen
- Beiträge: 7
- Registriert: 16. Juni 2010 15:44
Re: Änderungen in QWebPage bemerken
Okay, hab nach langem Herumprobiern noch eine Lösung gefunden, die zumindest zu funktionieren scheint, allerdings dabei eher einen Umweg geht...
Sobald sich der Inhalt einer QWebPage ändert, wird ja ein repaintRequested-Signal gefeuert, auf das ich wunderbar reagieren kann. Nun wird dies aber ja auch z.B. bei einer Größenänderung aktiv, also achte ich noch auf finishedNetworkRequest-Signal des zum QWebPage gehörenden QNetworkAccessManager und setze da ein Flag. Jetzt könnte es natürlich passieren, dass ein NetworkRequest fertig ist, der repaint direkt danach aber durch etwas anderes getriggert wird, bevor der neue Inhalt angezeigt wird. In Tests ist das bisher nicht passiert, aber trotzdem find ich die Lösung immer noch etwas unschön...
Sobald sich der Inhalt einer QWebPage ändert, wird ja ein repaintRequested-Signal gefeuert, auf das ich wunderbar reagieren kann. Nun wird dies aber ja auch z.B. bei einer Größenänderung aktiv, also achte ich noch auf finishedNetworkRequest-Signal des zum QWebPage gehörenden QNetworkAccessManager und setze da ein Flag. Jetzt könnte es natürlich passieren, dass ein NetworkRequest fertig ist, der repaint direkt danach aber durch etwas anderes getriggert wird, bevor der neue Inhalt angezeigt wird. In Tests ist das bisher nicht passiert, aber trotzdem find ich die Lösung immer noch etwas unschön...