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:
HTMLSource := (WebBrowser1.Document as IHTMLDocument2).body.get_innerHTML;
(das habe ich irgendwo abgeschrieben)
- 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:
(WebBrowser1.Document as IHTMLDocument2).body.set_innerHTML(HTMLSource);
Ergebnis:
- 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 www.example.de empfangener Code:
Code:
<
html>
<head>
<title>Example-Page</title>
</head>
<body>
Hello World!
</body>
</
html>
Nach meiner Veränderung sieht der Code so aus:
Code:
<
html>
<head>
<title>Example-Page</title>
</head>
<body>
<script type="text/javascript"> alert('Willkommen!'); </script>
Hallo Welt!
</body>
</
html>
Effekt: der Browser zeigt zwar "Hallo Welt" statt "Hello World!" an, aber es kommt kein alert-Fenster.
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.