AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TWebBrowser: JavaScript "anstoßen" nach Quelltextänderung
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Caps · begonnen am 29. Okt 2010 · letzter Beitrag vom 29. Okt 2010
Antwort Antwort
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
Bernerbaer
(Gast)

n/a Beiträge
 
#2

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

  Alt 29. Okt 2010, 11:59
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.
Doch, sollte so schon lösbar sein mit Hilfe von <base href="http://www.originaldomain.com"> im Header der HTML-Seite.
  Mit Zitat antworten Zitat
Caps

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

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

  Alt 29. Okt 2010, 12:20
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.
Doch, sollte so schon lösbar sein mit Hilfe von <base href="http://www.originaldomain.com"> im Header der HTML-Seite.
Hm, scheint zu funktionieren . Ich danke sehr für diesen Tipp, aber ich breche noch nicht in Jubel aus; weil ich mir noch unsicher bin, ob das mein Problem wirklich löst; für den Anfang jedenfalls sieht es sehr gut aus, danke nochmals! Ich markiere den Thread als "gelöst", wenn ich genügend getestet habe...

Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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