AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Webbrowser Refresh mit anschließenden OnDocumentComplete
Thema durchsuchen
Ansicht
Themen-Optionen

Webbrowser Refresh mit anschließenden OnDocumentComplete

Ein Thema von Onkelrossie · begonnen am 22. Mai 2009 · letzter Beitrag vom 23. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#1

Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 13:47
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 15:54
Hallo

Ein Möglichkeit: Anstatt Refresh2 aufzurufen wird einfach nochmals navigiert:

WebBrowser1.Navigate(WebBrowser1.LocationURL)
Thomas
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 16:13
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);
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#4

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 18:27
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 18:43
Navigiere mit dem Flag navNoReadFromCache oder setze DLCTL_PRAGMA_NO_CACHE (siehe msdn)
Thomas
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#6

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 19:53
Hallo toms,

ich habe deinen Rat befolgt und es so probiert:

Delphi-Quellcode:
//Button1
var
  Flag: OleVariant;
begin
  if WB1.Busy then WB1.Stop;
  Flag := NavNoReadFromCache;
  WB1.Navigate(WB1.LocationURL, Flag);
end;
Aber das Funktioniert nicht so richtig. Es wird zwar die Seite neu geladen
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 20:09
Sorry, NavNoReadFromCache is laut msdn nicht implementiert. Bleibt also noch der Versuch mit DLCTL_PRAGMA_NO_CACHE. (z.B TEmbeddedWB/TEwbCore von bsalsa verwenden)
Thomas
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#8

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 20:48
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 20:51
Bei DownloadOptions DownloadAndIgnoreCache auf True setzen.
Thomas
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#10

Re: Webbrowser Refresh mit anschließenden OnDocumentComplete

  Alt 22. Mai 2009, 21:16
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 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