Probleme mit TWebBrowser und HTML-Inject
Hallo,
ich nutze folgenden Code, um in einen TWebBrowser HTML direkt zu "injizieren":
Delphi-Quellcode:
Das funktioniert auch soweit, nur auf manchen Systemen (bisher 2 von ca. 60) interpretiert er den HTML-Code nicht, sondern zeigt diesen an.
{ ************************************************************ }
procedure WB_InjectHTML (WebBrowser: TWebBrowser; HTMLCode: String); { ************************************************************ } var sl: TStringList; ms: TMemoryStream; begin WebBrowser.Navigate('about:blank'); while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; if Assigned(WebBrowser.Document) then begin sl := TStringList.Create; try ms := TMemoryStream.Create; try sl.Text := HTMLCode; sl.SaveToStream(ms); ms.Seek (0, 0); (WebBrowser.Document as IPersistStreamInit).InitNew; (WebBrowser.Document as IPersistStreamInit).Load (TStreamAdapter.Create (ms)); finally ms.Free; end; finally sl.Free; end; end; end; Ich habe Windows XP Professional, SP 1 und alle akt. Updates, IE-Version 6.0.2800. Die anderen Kunden verstreut Windows 98, 2000, XP, ME. Ein betroffenes System ist z.B. Windows XP Home, IE v.6.0.2000. Ich denke aber nicht, dass es an der IE-Version liegt, da die anderen Kunden zum Teil ziemlich alte Systeme haben und da streikts auch nicht. Auf einem Notebook mit Windows 98, selbst auf unserem Windows 98 PC, funktioniert das. :gruebel: Hat jemand eine Idee, warum das dort nicht funktioniert? Ein alternativer Code, der allerdings eine Zugriffsverletzung bei Range := ((WebBrowser...) verursacht, wäre:
Delphi-Quellcode:
Was ist der Unterschied zu dem anderen? Könnte vielleicht jemand so freundlichen sein, und mir das erklären?
{ ************************************************************ }
procedure WB_InjectHTML (WebBrowser: TWebBrowser; HTMLCode: String); { ************************************************************ } var Range: IHTMLTxtRange; begin Range := ((WebBrowser.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange; Range.Collapse (FALSE); Range.PasteHTML (HTMLCode); end; Vielen Dank und viele Grüße, Mario |
Re: Probleme mit TWebBrowser und HTML-Inject
Bin zwar sicher, daß schon lange eine Lösung gefunden wurde, aber das Range Problem kann durch ein
Code:
umgangen werden.
WebBrowser.Navigate('about:blank');
while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages ; |
Re: Probleme mit TWebBrowser und HTML-Inject
Hallo Mario,
im Prinzip verwende ich den selben Code in meinen Anwendungen - ohne Probleme. Der einzige Unterschied ist, dass ich die Methode InitNew() nicht aufrufe und die Initialisierung durch Load() erledigen lasse. Die AV beim Range-Ansatz liegt mit Sicherheit am nicht initialisierten Document, wie delphiNoob angedeutet hat. Grüße vom marabu |
Re: Probleme mit TWebBrowser und HTML-Inject
Hallo!
Hab den Thread ja hier völlig vergessen. :mrgreen: Ja, das Problem bei der Range-Lösung war tatsächlich das nicht initialisierte Dokument. Bin dann später auch auf diese Lösung gestoßen ...
Delphi-Quellcode:
... und die funktioniert auch auf den beiden betroffenen Systemen. :)
{ ************************************************************ }
procedure WB_InjectHTML (WebBrowser: TWebBrowser; HTMLCode: String); { ************************************************************ } var Range: IHTMLTxtRange; begin WebBrowser.Navigate ('about:blank'); while (WebBrowser.ReadyState <> READYSTATE_COMPLETE) do ProcessMessages; Range := ((WebBrowser.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange; Range.pasteHTML(HTMLCode); end; Grüße, Mario |
AW: Probleme mit TWebBrowser und HTML-Inject
heya,
auch wenn das Thema sehr alt ist, hab ich folgende frage dazu: Wie funktioniert das einfügen von HTML Code, indem sich nun auch Stylesheets und Javascripte befinden ?! mit dieser Methode wie oben gepostet, ignoriert er komplett den Header. Gibt es irgendwo die möglichkeit statt
Delphi-Quellcode:
irgendwie das gesamte Document zu nehmen und Quelltext reinzukopieren ?
((WebBrowser.Document as IHTMLDocument2).body
Hoffe ich konnte mich verstädlich genug ausdrücken ;D |
AW: Probleme mit TWebBrowser und HTML-Inject
hat sich nun erledigt mit der wunderbaren funktion der Schweizer =)
bei der werden Javascripte und CSS direkt mit übernommen wenn sie im HTMLCode stehen
Delphi-Quellcode:
uses
ActiveX; procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string); var sl: TStringList; ms: TMemoryStream; begin WebBrowser.Navigate('about:blank'); while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; if Assigned(WebBrowser.Document) then begin sl := TStringList.Create; try ms := TMemoryStream.Create; try sl.Text := HTMLCode; sl.SaveToStream(ms); ms.Seek(0, 0); (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); finally ms.Free; end; finally sl.Free; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin WB_LoadHTML(WebBrowser1,'SwissDelphiCenter'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 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