Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

TWebBrowser kann Script nicht ausführen

73 views
Skip to first unread message

Rene Kadner

unread,
Mar 23, 2009, 1:48:35 PM3/23/09
to
Ich möchte in meiner Applikation zur Adresse den GoogleMaps Eintrag
anzeigen. Dazu habe ich ein TWebBrowser Element auf die Form gelegt.
In einem String generiere ich den HTML Text, den ich dann per
WebBrowser1.Document.Write() lade.

Ein einfaches "Hello World" in HTML wird fehlerfrei angezeigt. Speichere ich
den generierten Google-String in eine HTML Datei und führe diese aus, dann
wird die Adresse korrekt angezeigt. Also stimmt erst einmal alles mit der
HTML - Codierung und der Webbrowser funktioniert prinzipiell auch.

In der Appliaktion hat der TWebBrowser allerings ein Problem damit. In Zeile
3 wird moniert: 'google' sei undefiniert. Als URL wird about:blank
angegeben.

Diese lade ich übrigens, bevor ich mit Write in den WebBrowser schreibe.
Mache ich das nicht, dann gibt es beim Write einen Zugriffsfehler.

...
WebBrowser1.Navigate('about:blank');
...
if not VarIsEmpty(WebBrowser1.Document) then
begin
...
vHTML[0] := GetHTMLText;
// ------- ohne WebBrowser1.Navigate('about:blank'); kommt hier ein
Zugriffsfehler -------
aHTMLDoc.write(PSafeArray(TVarData(vHTML).VArray));
...


function TForm2.GetHTMLText: string;
const CRLF = #13#10;
begin
result := '<html>'+CRLF;
result := result+'<head>'+CRLF;
result := result+'<meta http-equiv="content-type" content="text/html;
charset=iso-8859-1"/>'+CRLF;

result := result+'<script type="text/javascript"
src="http://maps.google.com/jsapi?key=ABQIAAAALFQ"></script>'+CRLF;
result := result+'<script type="text/javascript">'+CRLF;
result := result+' google.load("maps", "2.99");'+CRLF; <--------------
kennt er nicht ?!


Was muss also beim TWebBrowser anders initialisiert werden, damit man in ein
leeres Element eine solche Seite laden kann?
Wie gesagt, einfacher HTML Code wird fehlerfrei akzeptiert.


Gruß
René


Marian Aldenhövel

unread,
Mar 24, 2009, 1:43:04 AM3/24/09
to
Hi,

> In einem String generiere ich den HTML Text, den ich dann per
> WebBrowser1.Document.Write() lade.

Das Problem besteht wohl einfach darin, daß Write() eben kein laden ist,
sondern ein reinschreiben. Der so manipulierte Browser sich also nicht
veranlasst sieht, das Google-Javascript zu besorgen.

Es ist nun scheinbar nicht ganz einfach, ein "Dokument" aus dem Speicher
zu laden, daß der IE die ganze normaler Nachladerei automatisch erledigt.

Das einfachste Beispiel, das ich auf die Schnelle gefunden habe geht so:

procedure LoadDocFromStream(WB: TWebBrowser; Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamIntf: IStream;
StreamAdapter: TStreamAdapter;
begin
PersistStreamInit := WB as IPersistStreamInit;
StreamAdapter := TStreamAdapter.Create(Stream);
StreamIntf := StreamAdapter as IStream;
PersistStreamInit.Load(StreamIntf);
end;

Selbst nicht getestet.

> Diese lade ich übrigens, bevor ich mit Write in den WebBrowser schreibe.
> Mache ich das nicht, dann gibt es beim Write einen Zugriffsfehler.

Machst Du das nicht, gibt es einfach kein Dokument, in das Du schreiben
könntest.

Ciao, MM

Rene Kadner

unread,
Mar 24, 2009, 12:53:00 PM3/24/09
to
Hallo Marian,

> Das einfachste Beispiel, das ich auf die Schnelle gefunden habe geht so:
>
> procedure LoadDocFromStream(WB: TWebBrowser; Stream: TStream);
> var
> PersistStreamInit: IPersistStreamInit;
> StreamIntf: IStream;
> StreamAdapter: TStreamAdapter;
> begin
> PersistStreamInit := WB as IPersistStreamInit;
> StreamAdapter := TStreamAdapter.Create(Stream);
> StreamIntf := StreamAdapter as IStream;
> PersistStreamInit.Load(StreamIntf);
> end;

Danke, das war der richtige Ansatz. Nach weiteren Suchen im Web habe ich
brauchbare Schnipsel gefunden.
Jetzt macht er das, was ich will :o)

Grüße
René


Xu, Qian

unread,
Mar 30, 2009, 1:51:37 PM3/30/09
to

Du kannst das IHTMLWindow3 Interface von TWebBrowser abfragen und dann
execScript(js_chrunk, "JScript") dein Code einfügen.


--
Xu, Qian (stanleyxu)
http://stanleyxu2005.blogspot.com

0 new messages