Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WebBrowser und eigene script language (https://www.delphipraxis.net/105593-webbrowser-und-eigene-script-language.html)

diabox 25. Dez 2007 15:04


WebBrowser und eigene script language
 
(Delphi 2007)

hallo Delphi-PRAXIS-Gemeinde und frohe Weihnachten!

Ich benutze die TEmbeddedWB-Komponente (Bsalsa.com: TEmbeddedWB), die sich aber von der Delphi Browser Komponente (und damit vom IE) ableitet.
Ich frage mich jetzt, wie ich einen Teil der Daten eines Dokuments selber interpretieren kann.
Bzw. wie ich einen eigenen Skript-Interpreter ins Spiel bringen kann. Das ganze mal als Beispiel:

Das HTML-Dokument:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Test-Dokument</title>
<style>
body {
background-color: #333333;
color: #FFFFFF;
margin: 0px 0px 0px 0px;
}
</style>
</head>
<body>
<script language="JavaScript">
alert('Dieser Teil interessiert mich nicht!');
</script>
<script language="MyScriptLang">
alert('Dieser Teil interessiert mich!');
</script>
</body>
</html>
Was bereits richtig läuft ist die Anzeige der MessageBox mit "Dieser Teil interessiert mich nicht!" (verursacht durch den JavaScript-Befehl: alert). Der andere Skriptteil wird einfach ignoriert - was ja eigentlich auch gut ist, denn ist gibt ja keine MyScriptLang. Ich möchte aber nun die Befehle in diesem Script-Block selber interpretieren und das am besten ohne dass das HTML-Dokument zweimal geparst (also dass ich die Datei einmal selber abrufe und sie nach meinen Script-Blöcken durchsuche und dann der Browser nochmal drüber guckt) werden muss.

Kann ich da irgendwelche Nachrichten abfangen, bzw. sowas wie nen Skript-Interpreter "registieren" oder sonst etwas tun um den Teil selbst zu interpretieren?

Im Moment interessiert mich dabei nur eine lokale Lösung, d.h. das muss nur in meinem Programm so passieren, aber wer die Masterlösung parat hat und mit 'ner globalen Lösung kommt: So rein interesse halber würd ich das auch gern wissen :D

Danke schonmal im voraus :-)

cruso 25. Dez 2007 17:05

Re: WebBrowser und eigene script language
 
Naja also eine Masterlösung für alle Browser wäre folgende: Du müsstest den Interpreter in JavaScript umsetzen und eben mit JavaScript das machen, was du zwischen den <script>-Tags stehen hast.

Das trifft vllt nicht 100%ig das was du möchtest; allerdings ist dies dann Browserunabhängig (und wenn es sich erst einmal etabliert hat, dann wird deine Sprache ja auch in den Browsern zum Standard :mrgreen: ).

diabox 25. Dez 2007 18:01

Re: WebBrowser und eigene script language
 
hmm.. dann gehen wir besser doch über zu einer lokalen lösung :D
was mir am JavaScript-Interpreter misfällt:

Ich möchte so etwas wie eine eigene Skriptsprache, weil ich das für den ordentlichsten Weg halte mit dem Browser zu kommunizieren: So wie der JavaScript-Befehl alert - vom Browser interpretiert - dazu auffordert eine MessageBox anzuzeigen. Sowas hätte ich auch gerne: eine Möglichkeit mit einem erweiterbaren Befehlssatz über den Browser mit meinem Programm zu kommunizieren.

cruso 25. Dez 2007 23:39

Re: WebBrowser und eigene script language
 
mhm :cry: :-D

NikoMitDaMacht 25. Dez 2007 23:48

Re: WebBrowser und eigene script language
 
Na ich denke da wirst du nicht um ein parsen herrumkommen

diabox 30. Dez 2007 13:18

Re: WebBrowser und eigene script language
 
Naja gut wär auch zu einfach gewesen ^^ Trotzdem danke :-)

Vielleicht noch ein Lösungsansatz für Leute mit ähnlichem Leiden:
Die TEmbeddedWB Komponente besitzt ein Event namens OnShowMessage.
Dieses Event wird aktiv, wenn der Browser ein Nachrichtfenster anzeigt (also sowas wie JavaScript's alert):
In diesem Event kann man den Text der MessageBox abfragen und danach dann entscheiden, ob man Result auf 0 setzt - die MessageBox wird nicht angezeigt oder ob man Result auf 1 setzt - die MessageBox wird angezeigt.

Bestimmt ein denkbar unsauberer Weg eigene Befehle über eine alert-Box, die nicht angezeigt wird an den Client zu senden, aber immerhin kommt man um das doppelt parsen herum. Für meine Zwecke reicht das eventuell schon.

Guten Rutsch ;-) :drunken:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 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