![]() |
Webbrowser Refresh mit anschließenden OnDocumentComplete
Hallo zusammen,
ich suche mich nun schon seit über 2 Stunden halb Tot aber finde für dieses augenscheinlich kleine Problem einfach keine Lösung. Ich benutze den TWebbrowser zum laden einer Seite. Jetzt möchte ich wenn ich auf den Button "aktualisieren" klicke, die Seite neu laden was ich mit Webbrowser.Refresh2 realisiert habe um dann alle änderungen in einer Liste anzeigen zu lassen. Dazu verwende ich das Ereigniss OnDocumentComplete welches aber, und das ist mein Problem, nach Webbrowser.Refresh2 nicht aufgerufen wird. Lade ich eine Seite ganz normal über Navigate dann funktioniert es; die Seite wird dann aber nicht aktualisiert sondern nur aus dem Cache geladen. Wäre für einen konspirativen Vorschlag sehr Dankbar. Mit freundlichen Grüßen Wolfgang |
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Hallo
Ein Möglichkeit: Anstatt Refresh2 aufzurufen wird einfach nochmals navigiert:
Delphi-Quellcode:
WebBrowser1.Navigate(WebBrowser1.LocationURL)
|
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Ich habe das in einem eigenen Programm so gelöst:
Delphi-Quellcode:
// Refresh Webbrowser in Unit WBFuncs.pas
procedure WB_Refresh(WB: TWebbrowser); const REFRESH_COMPLETELY = 3; var KeyState: TKeyBoardState; RefreshLevel: OleVariant; begin if WB_DocumentLoaded(WB) then begin GetKeyboardState(KeyState); try if not ((KeyState[vk_Control] and 128) <> 0) then WB.Refresh else // if control key pressed then REFRESH_COMPLETELY // RefreshLevel specifies the refresh level. RefreshLevel := REFRESH_COMPLETELY; WB.DefaultInterface.Refresh2(RefreshLevel); except end; end; end; ... // Get the current (visible) TWebbrowser in PC1=PageControl function TForm1.GetCurrentWB: TWebbrowser; begin Result := nil; with PC1 do if ActivePage.ControlCount > 0 then begin if ActivePage.Controls[0] is TWebbrowser then begin Result := (TWebbrowser(ActivePage.Controls[0])); end else Result := FPrevBrowser; end; end; ... WB_Refresh(GetCurrentWB); |
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Danke erstmal für die Antworten!
toms: Deine Lösung habe ich schon einmal versucht aber das Problem ist dann das die Seite nur aus dem Cache geladen wird und nicht neu vom Server bezogen wird. Wenn sich also etwas geändert hat muss ich das Programm erst neu starten um diese änderung zu sehen oder ich rufe Refresh2 auf dann muss ich die Seite nur nochmal neu laden und ich sehe alle änderungen. Das Problem daran ist dann allerdings wieder das kein OnDocumentComplete nach dem Refresh aufgerufen wird. Ich kann dann zwar nach dem Refresh2 noch einmal die Seite vie Navigate neu aufrufen aber Refresh2 läd die Seite doch schon neu nur das dann das benötigte Ereigniss nicht aufgerufen wird. hathor: Deine Lösung habe ich getestet aber hat ebenfalls nicht funktioniert. Es wird auch kein Ereigniss aufgerufen oder habe ich etwas falsch verstanden an deinem Vorschlag? Danke für weitere Hilfe! Mit freundlichen Grüßen Wolfgang |
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Navigiere mit dem Flag navNoReadFromCache oder setze DLCTL_PRAGMA_NO_CACHE (siehe
![]() |
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Hallo toms,
ich habe deinen Rat befolgt und es so probiert:
Delphi-Quellcode:
Aber das Funktioniert nicht so richtig. Es wird zwar die Seite neu geladen
//Button1
var Flag: OleVariant; begin if WB1.Busy then WB1.Stop; Flag := NavNoReadFromCache; WB1.Navigate(WB1.LocationURL, Flag); end; und OnDocumentComplete wird auch korrekt ausgeführt aber die Seite ist troz änderungen immernoch die selbe wie seit dem Programmstart. Erst wenn ich vorher Refresh2 ausführe wird die Seite scheinbar wirklich neu geladen nur das ich nicht alle Dokumente bei OnDocumentComplete erhalte. Was mache ich nur falsch? Mit freundlichen Grüßen Wolfgang |
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Sorry, NavNoReadFromCache is laut msdn nicht implementiert. Bleibt also noch der Versuch mit DLCTL_PRAGMA_NO_CACHE. (z.B TEmbeddedWB/TEwbCore von bsalsa verwenden)
|
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Hallo toms,
ich habe nun alles auf den EmbeddedWB umgestellt was ja recht einfach ging. Aber kannst du mir das noch etwas genau erklären wie ich DLCTL_PRAGMA_NO_CACHE mit dem EmbeddedWB zu verwenden habe? Mit freundlichen Grüßen Wolfgang |
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
Bei DownloadOptions DownloadAndIgnoreCache auf True setzen.
|
Re: Webbrowser Refresh mit anschließenden OnDocumentComplete
toms, mit dem DownloadAndIgnoreCache auf True setzen hatte ich leider keinen Erfolg.
Aber ich wenn ich CheckPageResynchronize auf True setze dann funktioniert es wunderbar. Danke Dir aber für deine Hilfe und für den Tipp mit dem EmbeddedWB! Mit freundlichen Grüßen Wolfgang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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