Seite 1 von 1

Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 00:40
von Delle
Hallo,

kann man den folgenden Code so verwenden? Das Programm soll erst weiterlaufen, wenn die Webseite vollständig geladen wurde.

Code: Alles auswählen

WebGadget(#Web,0,0,800,600,url$)
While GetGadgetAttribute(#Web,#PB_Web_Busy)<>0
While WindowEvent():Wend
Wend
Soll ich ev. zwischen Webgadget und While ein Delay machen?

Nicht das am Ende noch gar nicht damit begonnen wurde die Website zu laden und While gleich überflogen wird...

Danke,
Delle

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 10:08
von RSBasic
Ich würde das nicht so machen, sondern:

Code: Alles auswählen

EnableExplicit

Define EventID
Define Browser.IWebBrowser2
Define SiteLoaded

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible)
  WebGadget(1, 10, 10, 480, 380, "http://webfail.de")
  ;Ist nur dazu da, um die nervigen IE-Fehlermeldungen zu unterdrücken.
  Browser = GetWindowLongPtr_(GadgetID(1), #GWL_USERDATA)
  Browser\put_Silent(#True)
  
  ;HideGadget(1, 1)
  
  Debug "Seite wird geladen. Bitte warten..."
  
  Repeat
    EventID = WaitWindowEvent()
    If GetGadgetAttribute(1, #PB_Web_Busy) = 0 And SiteLoaded = 0
      ;HideGadget(1, 0)
      ;oder
      HideWindow(0, 0)
      SiteLoaded = 1
      Debug "Seite wurde vollständig geladen."
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 10:47
von Danilo
RSBasic hat geschrieben:Ich würde das nicht so machen, sondern:
[...]
WinAPI forever.
:D

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 12:41
von Delle
RSBasic hat geschrieben:Ich würde das nicht so machen, sondern:
Jetzt fehlt mir nur noch die Begründung ;)

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 12:49
von Andesdaf
bei RSBasics Code besteht die Möglichkeit, dass während des Ladevorgangs
noch auf andere Events reagiert werden kann (z.B. Schließen des Fensters).
Dein Code würde das Programm während des Ladens der Seite erst einmal
nicht ansprechbar machen, was in den Augen des Anwenders nicht positiv
rüberkommen wird.

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 12:56
von Delle
Andesdaf hat geschrieben:bei RSBasics Code besteht die Möglichkeit, dass während des Ladevorgangs noch auf andere Events reagiert werden kann (z.B. Schließen des Fensters). Dein Code würde das Programm während des Ladens der Seite erst einmal nicht ansprechbar machen, was in den Augen des Anwenders nicht positiv rüberkommen wird.
Der Anwender soll da auch gar nicht irgendwie drin rumklicken ;)

Mir ging's mehr darum, dass das Webgadget am Ende noch gar nicht läd aber While schon aufgerufen und eben übersprungen wird.

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 14:40
von Delle
RSBasic hat geschrieben:Wenn ein Fenster geöffnet wird und dann muss die Eventschleife stets durchlaufen werden, da sonst das Fenster nicht reagiert und keine Events abgefeuert und verarbeitet werden können. Es ist einfach unsauber, wenn das Fenster aufgrund eines Delays oder einer anderen Schleife nicht auf Events reagieren kann.
Ich weiß, aber in dem Falle ist es a) egal und b) der User soll auch gar nicht während dem Ablauf "reinpfuschen".
RSBasic hat geschrieben:Außerdem würde dein Code, den du in deinem Startbeitrag gepostet hast, nicht funktionieren, weil GetGadgetAttribute(#WebGadget, #PB_Web_Busy) den Wert "1" zurückgibt, wenn die Seite noch beim Laden ist. Wenn der Ladevorgang fertig ist, dann wird "0" zurückgegeben.
Nun dann ist die Hilfe anscheinend fehlerhaft:
#PB_Web_Busy: Gibt einen Wert ungleich Null zurück, wenn das Gadget mit dem Laden einer Seite beschäftigt ist.
Also irgendein Wert (außer 0) wenn es noch läd.
Wert = GetGadgetAttribute(#Gadget, Attribut)
Rückgabewert: Gibt den Wert des angegebenen Gadget-Attributs zurück, oder Null wenn das Gadget das Attribut nicht unterstützt.
Und hier wird angeblich 0 zurückgegeben, wenn das Attribut nicht unterstützt wird...

Re: Abfrage mittels #PB_Web_Busy ob WebGadget noch läd

Verfasst: 23.10.2013 15:47
von bobobo
LOGIK ¿?¿?
Das schliesst sich nicht aus. Das Webgadget unterstützt ja das Attribut und gibt 0 zurück wenn es
fertig ist mit dem Laden.