Einzelnen Beitrag anzeigen

Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

TWebBrowser: JavaScript "anstoßen" nach Quelltextänderung

  Alt 29. Okt 2010, 11:18
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.
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat