![]() |
TWebbrowser läd about:blank nicht
Hallo zusammen,
first of all: ich habe bereits alle relevanten TWebbrowser Threads in der DP durch. Ich habe das Problem, dass auf Terminalservern bei Benutzern die per RDP aufgeschaltet sind, öfters das Laden von 'about:blank' fehl schlägt. Das Problem ist nicht häufig reproduzierbar und daher ein bisschen tricky zu analysieren. Vor allem tritt es nur auf Terminalservern von Windows auf. Auf Windows 7 oder 8 Rechnern ist das Problem bisher nie (in Worten "NIE") aufgetreten. Der TWebbrowser ist ein Texteditor mit einem IHTMLDocument2 Dokument mit dem man Text formatieren kann. Ich schreibe erstmal ein bisschen Code:
Delphi-Quellcode:
Das schlägt häufig 3 mal hintereinander fehl. Da ich keine Endlosschleife generieren möchte, springe ich dann andernfalls mit einem Exit aus der Initialisierung des Webbrowser heraus und versuche es im OnShow nochmal (s.u.)
Procedure InitFrame;
function LadeAboutBlank: Boolean; var SleepSumme: Integer; Flags: OleVariant; begin Result := True; // don't use cache for local files Flags := Flags or navNoReadFromCache or navNoWriteToCache; // Ein Navigate muss gemacht werden, damit der restliche HTML-Code in dieses leere // Dokument eingefügt werden kann. if WarteAufWebbrowser(WebBrowser1) then WebBrowser1.Navigate('about:blank', Flags); SleepSumme := 0; //and ((WebBrowser1.ReadyState < READYSTATE_INTERACTIVE) or WebBrowser1.Busy) while not FNavigateComplete do begin Pause(5); SleepSumme := SleepSumme + 5; if SleepSumme > 2500 then begin Result := False; break; end else Result := True; end; end; begin for I := 0 to 3 do begin LadeAboutBlankDone := LadeAboutBlank(); if LadeAboutBlankDone then break; end; end; FNavigate wird folgendermaßen gesetzt:
Delphi-Quellcode:
Ich versuche das einmal im OnCreate des Forms. Im OnShow prüfe ich ob das Document geladen wurde. Wenn nicht, lade ich es stumpf neu. Das schlägt allerdings ebenso häufig fehl
procedure TFrameHTMLEditor.WebBrowser1BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); begin FCurDispatch := nil; FNavigateComplete := False; end; procedure TFrameHTMLEditor.WebBrowser1NavigateComplete2(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin FNavigateComplete := True; if FCurDispatch = nil then FCurDispatch := pDisp; end;
Delphi-Quellcode:
procedure TFormSendMail.FormShow(Sender: TObject);
begin if FrameHTMLEditor1.WebBrowser1.Document = nil then FrameHTMLEditor1.InitFrame(); end; Was mir aufgefallen ist: Beim ersten Laden wird das OnDocumentComplete-Event nicht ausgelöst. Beim zweiten Navigate zu about:blank schon. Sense where? Das grundlegende Problem ist folgendes: Das Document des Webbrowser wird nicht richtig initialisiert, d.h. er zeigt eine weiße Seite an (es wird kein Document geladen). Das WarteAufWebbrowser macht folgendes:
Delphi-Quellcode:
Wie kann ich sicherstellen, dass das IHTMLDocument2 mit dem "navigate('about:blank')" richtig geladen wird? Bringt das setzen der URL-Property eventuell was?
function WarteAufWebbrowser(AWebBrowser: TWebBrowser): Boolean;
var SleepSumme: Integer; begin Result := True; SleepSumme := 0; while (AWebBrowser.ReadyState < READYSTATE_INTERACTIVE) or AWebBrowser.Busy do begin Pause(5); SleepSumme := SleepSumme + 10; if SleepSumme > 5000 then begin Result := False; break; end else Result := True; end; end; In meinem Fall ist wohl, das Problem, dass das OnNavigateComplete-Event nicht ausgelöst wird und es deswegen nicht weiter geht im Code. Irgendwelche Ideen, eventuell auch mal rechts und links abseits des Weges? |
AW: TWebbrowser läd about:blank nicht
Und wie soll irgendwas innerhalb deiner Schleife passieren, wenn du im Hauptthread niemandem die Gelegenheit gibts, daß er auch nur irgendwas machen kann?
|
AW: TWebbrowser läd about:blank nicht
Zitat:
Im FormCreate des Frames wird "TFrameHTMLEditor.InitFrame" aufgerufen. Sorry :oops: |
AW: TWebbrowser läd about:blank nicht
niemand?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz