[C#] Webbrowser control document_complete event

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo,

Ik loop al eventjes tegen het volgende probleem aan:

ik heb een thread waarmee ik pagina's via een delegate browse.
in deze thread zit een while loop dat wacht tot ik een boolean omzet om aan te geven dat de pagina klaar is
het DocumentCompleted event word getriggered voor elke frame in de pagina, hier komen de problemen.

hoe kan ik kijken of alle frames volledig geladen zijn? Readystate werkt niet en ook Webbrowser.IsBusy ook niet. Het tellen van de frames is niet mogelijk aangezien de aantallen nog wel eens willen wisselen.

kan iemand hier mij op weg helpen met deze breinbreker?

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Het via de args van het DocumentCompleted event kun je aan de url komen waarvoor het event is getriggert.

Volgens mij wordt het event voor het hele document als laatste getriggert, dus als alle frames zijn geladen. Je zou de boolean dus op true kunnen kunnen zetten op het moment dat het DocumentCompleted event is getriggert met de url waarnaar je genavigeerd hebt. Bijv:

C#:
1
2
3
4
5
6
7
8
9
10
private bool _Loaded = false;

void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    WebBrowser webBrowser = (WebBrowser)sender;
    if (e.Url == webBrowser.Url)
    {
        _Loaded = true;
    }
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die heb ik ook al gezien alleen weet ik van de laatste frame helaas de url niet aangezien een frame weer 2 andere frames maakt, wat deze benadering weer lastig maakt.

En als ik een messagebox.show erin zet krijg ik voor de hoofdpagina (6 frames) 6x een messagebox terug. vreemd gedrag wat ik eruit haal.

Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Je hebt volgens mij niet begrepen wat ik bedoel. Pas als alle frames geladen zijn wordt het DodumentCompleted event getriggert met als argument de url van de "hoofdpagina".

Dat betekend dat wanneer het DocumentCompleted event wordt getriggert en args.Url == url van hoofdpagina dan weet je dat de hoofdpagina volledig is geladen, incl alle frames (al dan niet nested).

Test maar eens:

C#:
1
2
3
4
5
6
7
8
9
10
void NavigerenMaar()
{
    webBrowser1.Navigate("http://www.w3schools.com/Html/tryit.asp?filename=tryhtml_frame_mix");
}


void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    Debug.WriteLine(e.Url);
}


resultaat:
code:
1
2
3
4
5
6
7
http://www.w3schools.com/Html/frame_a.htm
http://www.w3schools.com/Html/frame_b.htm
http://www.w3schools.com/Html/frame_c.htm
http://www.w3schools.com/Html/tryit_view.asp?filename=tryhtml_frame_mix
http://www.w3schools.com/banners/leaderframe.asp?adpartner=googletry&numb=0.8559948
http://www.w3schools.com/tryitbanner.asp?secid=tryhtml&rnd=0.7248957
http://www.w3schools.com/Html/tryit.asp?filename=tryhtml_frame_mix     <-------------


Hier zie je dat de pagina naar waar je naar genavigeerd bent als laatste wordt getriggerd. En dan weet je wanneer het document volledig is geladen incl alle frames. Dat is wat je wilt weten toch?

p.s.: Kijk eens naar "Busy Waiting" of eigenlijk de alternatieven daar voor ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helaas werkt dat ook niet, ik krijg nadat ik een ander frame refresh niet meer het hoofdframe terug in de e.url gaat nu als volgt:

Inlogpagina
vul tekstveldjes username en password in
klik op login knop
vul zoekopdracht in
klik op search knop
-hang-

de search knop doet in een ander frame de resultaten tonen d.m.v. een javascript.
voor wie er bekend mee is het is een ZyLAB/ZyIMAGE webclient van versie 6.1 waar ik doorheen probeer te 'klikken'