56 votes

Détecter le chargement complet de la page WebBrowser

Comment puis-je détecter la fin du chargement d'un contrôle WebBrowser?

J'ai essayé d'utiliser les événements Naviguer et DocumentCompleted, mais les deux ont été soulevés à quelques reprises lors du chargement du document!

35voto

Paul Kearney - pk Points 3300

Je pense que l'événement DocumentCompleted sera déclenché pour tous les documents enfants également chargés (comme JS et CSS, par exemple). Vous pouvez consulter les WebBrowserDocumentCompletedEventArgs de DocumentCompleted et vérifier la propriété Url et la comparer à l’URL de la page principale.

29voto

Kyle Rozendo Points 15606

J'ai fait ce qui suit:

 void BrowserDocumentCompleted(object sender,
        WebBrowserDocumentCompletedEventArgs e)
{
  if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
    return; 

  //The page is finished loading 
}
 

La dernière page chargée a tendance à être celle sur laquelle vous avez navigué, cela devrait donc fonctionner.

À partir d' ici .

17voto

ePandit Points 86

Ce qui suit devrait fonctionner.

 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    //Check if page is fully loaded or not
    if (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete)
        return;
    else
        //Action to be taken on page loading completion
}
 

13voto

Sheng Jiang 蒋晟 Points 11113

Notez l'url dans DocumentCompleted peut être différent de celui de la navigation url en raison de transfert de serveur ou l'url de la normalisation (par exemple, vous accédez à www.microsoft.com et a obtenu http://www.microsoft.com dans documentcomplete)

Dans les pages sans images, cet événement se déclenche une seule fois après le chargement est terminé. Dans les pages avec plusieurs images, cet événement se déclenche pour chaque navigation cadre (note de navigation est pris en charge à l'intérieur d'un cadre, par exemple en cliquant sur un lien dans une image pourrait naviguer dans le cadre d'une autre page). Le plus haut niveau de la navigation image, ce qui peut ou peut ne pas être le top niveau du navigateur, les feux de la DocumentComplete finale de l'événement.

En code natif vous permettrait de comparer l'expéditeur de l'événement DocumentComplete pour déterminer si l'événement est le dernier événement dans la navigation ou pas. Toutefois, dans Windows Forms le paramètre sender n'est pas emballé par WebBrowserDocumentCompletedEventargs. Vous pouvez soit l' évier, le natif de l'événement pour obtenir la valeur du paramètre ou de vérifier la propriété readystate du navigateur ou de cadre de documents dans le DocumentCompleted gestionnaire d'événements pour voir si toutes les images sont dans l'état prêt.

Il y a un prolblem avec la readystate méthode comme si un gestionnaire de téléchargement est présente et que la navigation est un fichier téléchargeable, la navigation peut être annulée par le gestionnaire de téléchargement et le readystate ne deviendra pas complète.

4voto

iArv Points 41

J'ai eu le même problème de plusieurs DocumentCompleted tiré des événements et essayé toutes les suggestions ci-dessus. Enfin, semble que dans mon cas ni IsBusy de la propriété des œuvres de droite, ni de Url de la propriété, mais l' ReadyState semble être ce dont j'avais besoin, parce qu'il a le statut "Interactive" pendant le chargement des images multiples et il a le statut "terminé" uniquement après le chargement de la dernière. Donc, je sais que quand la page est complètement chargée, avec toutes ses composantes.

J'espère que cela peut aider les autres aussi :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X