Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebBrowser / JS / AJAX überwachen (https://www.delphipraxis.net/158599-twebbrowser-javascript-ajax-ueberwachen.html)

Jacques Murell 23. Feb 2011 15:07

TWebBrowser / JS / AJAX überwachen
 
Moin,

ich habe mir eine kleine Beispielwebseite gebaut, welche via JavaScript eine beliebige Zahlenkombination ausgibt.
Diese Webseite lade ich innerhalb meiner Applikation in einen TWebBrowser und lasse sie darstellen.

Nun zum Problem: Die Webseite ändert in unregelmäßigen Abständen ihren Inhalt, dass heißt via JavaScript werden die Zahlenkombinationen auf die Seite gestellt. Ich stehe nun vor dem Problem: Ich müsste innerhalb meiner Applikation sofort darauf reagieren, wenn sie der Inhalt der Webseite ändert.

Die aktuelle Zahlenkombination steht ja im Webseitenquelltext. Läuft das JS-Skript nun aber weiter, ändert sich logischerweise die Kombination jedenfalls in der Anzeige - der Seitenquelltext bleibt ja unverändert. Ein ständiges Neuladen der Seite kommt aus Traffic und anderen Gründen nicht in Frage.

Leider verfügt der TWebbrowser über keine "OnChange"-Funktion oder so, wie kann ich also auf solche Veränderungen innerhalb der geladenen Webseite reagieren? Ich bin für jeden Tipp / Hinweis sehr dankbar, vielen Dank schonmal.

lg

Phoenix 23. Feb 2011 15:48

AW: TWebBrowser / JS / AJAX überwachen
 
Es gibt keine Möglichkeit, Änderungen im DOM so unmittelbar zu überwachen.
Die einfachste Möglichkeit wäre wahrscheinlich, das dort laufende Javascript zur Laufzeit so zu modifizieren, dass es nachdem es die geänderten Werte geschrieben hat sie Dir das noch mitteilt. Dazu kannst Du z.B. ein DOM-Event auf dem Document auslösen und das im TWebBrowser abfangen.

Jacques Murell 23. Feb 2011 15:52

AW: TWebBrowser / JS / AJAX überwachen
 
Das ist das Problem. Bei meinem eigenen kleinen Test-JS mag das klappen; leider jedoch habe ich beim eigentlich Zielprojekt gar keinen Einfluss auf das JavaScript und kann da nichts ändern. Gibt es denn wirklich keine Möglichkeit den TWebBrowser auf angezeigte Änderungen zu überwachen?

Phoenix 23. Feb 2011 15:56

AW: TWebBrowser / JS / AJAX überwachen
 
Nein, Du kannst lediglich in den TWebbrowser eigenes Javascript einschleusen welches das vom Zielprojekt vorgegebene Javascript zur Laufzeit verändert. Javascript ist eine hochdynamische Sprache, und Du kannst mit eigenem Javascript komplette existierende Funktionen ändern, umschreiben, anpassen, whatever. :) Natürlich kannst Du da beliebig alles ändern, und einen einzelnen Call hinzufügen ist da noch das einfachste.

Jacques Murell 23. Feb 2011 16:09

AW: TWebBrowser / JS / AJAX überwachen
 
Oki, danke dir. Das Problem ist, dass ich keinerlei Einblick in das fremde JS hab. Das heißt ich wüsste nichtmal was ich denn ändern sollte. :-( Gibt es vlt andere Möglichkeiten außerhalb des TWebBrowsers - auf den könnte ich verzichten.

Phoenix 23. Feb 2011 16:24

AW: TWebBrowser / JS / AJAX überwachen
 
Nein, das DOM stellt keine Überwachungsfunktionen bereit. Das andere JS kannst Du Dir aber z.B. im Firefox mit Firebug angucken - und dort auf in der console live bearbeiten zum testen. So schwierig ist das jetzt ned. Was ist denn das für eine seltsame Seite?

Jacques Murell 23. Feb 2011 16:36

AW: TWebBrowser / JS / AJAX überwachen
 
Ein kleines Portal das Daten bereitstellt. Laut Betreiber darf ich diese Daten nutzen (solange ich die richtige Webseite vollständig anzeige, daher TWebBrowser) aber weitere Informationen zu den Skripten bzw wie ich auf die Sekunde genau auf die Änderungen reagieren kann stellt er mir nicht bereit.

Aktuell weiß ich nichtmal ob die Daten der per JS (war nur meine Vermutung) eingespeist werden oder doch via AJAX. Wie bekommt denn der Browser die Änderungen mit? Immerhin ändert dieser ja die Anzeige. Ich weiß ja nicht, wollte die Anwendung eigentlich via Delphi schreiben aber wenn es andere Lösungsmöglichkeiten via PHP oder anderen Sprachen gäbe wäre ich für Tipps sehr dankbar. Im allerletzten Fall würde ich dann auf OCR zurückgreifen müssen - sofern sich das realisieren lässt.

rollstuhlfahrer 23. Feb 2011 17:27

AW: TWebBrowser / JS / AJAX überwachen
 
Wie der Browser das mitbekommt ist ganz einfach: Du benutzt z.B. document.write('BLA');. Dann führt der Browser das aus, ändert den Quellcode und zeigt diesen dann an. Hierbei handelt es sich um Browser-interna, genauso wie JavaScript selbst. Also: Wie der Browser das mitbekommt? - Er sagt es sich selbst, weil er auch für die Auswertung von JS zuständig ist.

Bernhard

Phoenix 23. Feb 2011 17:41

AW: TWebBrowser / JS / AJAX überwachen
 
Zitat:

Zitat von Jacques Murell (Beitrag 1083844)
Aktuell weiß ich nichtmal ob die Daten der per JS (war nur meine Vermutung) eingespeist werden oder doch via AJAX. Wie bekommt denn der Browser die Änderungen mit? Immerhin ändert dieser ja die Anzeige. Ich weiß ja nicht, wollte die Anwendung eigentlich via Delphi schreiben aber wenn es andere Lösungsmöglichkeiten via PHP oder anderen Sprachen gäbe wäre ich für Tipps sehr dankbar. Im allerletzten Fall würde ich dann auf OCR zurückgreifen müssen - sofern sich das realisieren lässt.

Erm.. AJAX = Asynchronous Javascript And Xml. Alles AJAX im Browser ist immer mittels Javascript realisiert.
Es gibt z.B. viele Seiten die Börsenkurse mit dieser Technologie hier aktualisieren. Auch hier kann man ein bisschen Javascript injizieren und die Funktionen die die neuen Werte in die Zellen schreiben so abändern dass sie diese z.B. erst noch per Alert() ausgeben oder in eine dynamisch hinzugefügte Textbox schreiben die dann ein von Extern abfangbares OnChange-Event feuert.

Edit: PS: Die meisten der Portale die diese Finanzdaten bereitstellen wären allerdings nicht begeistert wenn man die so abgreift.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz