![]() |
TWebBrowser: JavaScript "anstoßen" nach Quelltextänderung
Einen wunderschönen guten Tag,
ich würde gern einem Quelltext ein bisschen JavaScript hinzufügen (bzw. darin etwas ersetzen), und dann das ganze ausführen. Genauer: Folgendes: Ich verwende einen TWebBrowser auf meiner Form. - Im Ereignis TForm1.WebBrowser1DocumentComplete lade ich den innerHTML-Quelltext als String in eine Variable:
Code:
(das habe ich irgendwo abgeschrieben)
HTMLSource := (WebBrowser1.Document as IHTMLDocument2).body.get_innerHTML;
- Dann verändere ich den String nach Lust und Laune. Ich füge beispielsweise anderen HTML-Inhalt ein, oder ich füge ein alert('Hello World!'); in einem SCRIPT-Bereich ein. - Auf Knopfdruck (Button-Handler) schreibe ich den veränderten String wieder in den Browser zurück:
Code:
Ergebnis:
(WebBrowser1.Document as IHTMLDocument2).body.set_innerHTML(HTMLSource);
- Alles was HTML ist (Tags, CDATA, etc.) wird perfekt im Browser angezeigt, und zwar ohne Umschweife sofort nach Aufruf von set_innerHTML. - Aber alles was mit JavaScript zu tun hat: Fehlanzeige. --> Lese ich den Quelltext erneut mit get_innerHTML aus (genau wie oben), so ist der JS-Code vorschriftsmäßig eingefügt worden, aber __ausgeführt__ wird er nicht. Konclusion: Ich glaube, ich muss der WebBrowser-Komponente irgendwie mitteilen, dass er den Quelltext bitte nochmal "neu rendern" soll. So als würde er die Seite neu betreten, aber meine Änderungen beibehaltend. Frage: Geht das überhaupt so wie ich das will, oder muss ich z.B. einen externen HTTP-Socket verwenden, um den Request zu senden, und dann "on-the-fly" den Quelltext ändern, und ihn erst dann dem Browser zusenden? Falls ja würde mich das aber zu dem Problem bringen, dass ich ja den vom Browser möglicherweise höchst komplizierten Request irgendwie nachbilden müsste, oder ich müsste einen Proxy bauen...? O Gott, muss ich wirklich einen Proxy schreiben, nur um ein alert in eine Seite einzubauen?! Das kann ich mir nicht vorstellen. Es bittet um Hilfe und dankt im Voraus Caps Illustrierendes Beispiel: Von ![]()
Code:
Nach meiner Veränderung sieht der Code so aus:
<html>
<head> <title>Example-Page</title> </head> <body> Hello World! </body> </html>
Code:
Effekt: der Browser zeigt zwar "Hallo Welt" statt "Hello World!" an, aber es kommt kein alert-Fenster.
<html>
<head> <title>Example-Page</title> </head> <body> <script type="text/javascript"> alert('Willkommen!'); </script> Hallo Welt! </body> </html> PS Lösungen, um von lokal den HTML-Code in den Browser zu laden, helfen leider nicht, weil in dem Quellcode relative Pfade zu Resourcen auf dem Server enthalten sind, die lokal nicht funktionieren. |
AW: TWebBrowser: JavaScript "anstoßen" nach Quelltextänderung
Zitat:
|
AW: TWebBrowser: JavaScript "anstoßen" nach Quelltextänderung
Zitat:
Caps |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz