Comment : accéder à la source HTML dans le modèle objet de document HTML managé
Les propriétés DocumentStream et DocumentText sur le contrôle WebBrowser renvoient le code HTML du document actif comme il était quand il a été affiché pour la première fois. Toutefois, si vous modifiez la page à l'aide des appels de méthode et de propriété tels que AppendChild et InnerHtml, ces modifications n'apparaissent pas quand vous appelez DocumentStream et DocumentText. Pour obtenir le code source HTML le plus à jour pour le modèle DOM, vous devez appeler la propriété OuterHtml sur l'élément HTML.
La procédure suivante illustre comment récupérer la source dynamique et l'afficher dans un menu contextuel distinct.
Récupération de la source dynamique avec la propriété OuterHtml
Créez une nouvelle application Windows Forms. Commencez par un seul Form, puis appelez-le
Form1
.Hébergez le WebBrowser contrôle dans votre application Windows Forms et nommez-le
WebBrowser1
. Pour plus d’informations, consultez How to : Add Web Browser Capabilities to a Windows Forms Application.Créez une seconde Form dans votre application appelée
CodeForm
.Ajoutez un RichTextBox contrôle à
CodeForm
et définissez sa Dock propriété surFill
.Créez une propriété publique sur
CodeForm
appeléeCode
.public string Code { get { if (richTextBox1.Text != null) { return (richTextBox1.Text); } else { return (""); } } set { richTextBox1.Text = value; } }
Public Property Code() As String Get If (RichTextBox1.Text IsNot Nothing) Then Code = RichTextBox1.Text Else Code = "" End If End Get Set(ByVal value As String) RichTextBox1.Text = value End Set End Property
Ajoutez un Button contrôle nommé
Button1
à votre Form, puis surveillez l’événement Click . Pour plus d’informations sur l’analyse des événements, consultez Événements.Ajoutez le code ci-après au gestionnaire d'événements Click.
private void button1_Click(object sender, EventArgs e) { HtmlElement elem; if (webBrowser1.Document != null) { CodeForm cf = new CodeForm(); HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("HTML"); if (elems.Count == 1) { elem = elems[0]; cf.Code = elem.OuterHtml; cf.Show(); } } }
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim elem As HtmlElement If (WebBrowser1.Document IsNot Nothing) Then Dim cf As New CodeForm() Dim elems As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("HTML") If (elems.Count = 1) Then elem = elems(0) cf.Code = elem.OuterHtml cf.Show() End If End If End Sub
Programmation fiable
Testez systématiquement la valeur de Document avant d'essayer de le récupérer. Si le chargement de la page active n'est pas terminé, l'initialisation de Document ou de ses objets enfants peut éventuellement ne pas se produire.
Voir aussi
.NET Desktop feedback