Поделиться через


Практическое руководство. Доступ к источнику HTML в управляемой объектной модели HTML-документа

Свойства DocumentStream и DocumentText элемента управления WebBrowser возвращают HTML-код текущего документа, как он существовал при первом отображении. Однако при изменении страницы с помощью вызовов методов и свойств, таких как AppendChild и InnerHtml, эти изменения не будут отображаться при вызове DocumentStream и DocumentText. Чтобы получить наиболее up-to-date HTML-источник для DOM, необходимо вызвать свойство OuterHtml в элементе HTML.

В следующей процедуре показано, как получить динамический источник и отобразить его в отдельном контекстном меню.

Получение динамического источника с помощью свойства OuterHtml

  1. Создайте новое приложение Windows Forms. Начните с одного Form. Назовите его Form1.

  2. Размещайте элемент управления WebBrowser в приложении Windows Forms и назовите его WebBrowser1. Дополнительные сведения можно найти в разделе «Добавление функциональности веб-браузера в приложения Windows Forms».

  3. Создайте второй Form в приложении с именем CodeForm.

  4. Добавьте элемент управления RichTextBox для CodeForm и задайте для свойства Dock значение Fill.

  5. Создайте общедоступное свойство в CodeForm с именем Code.

    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
    
  6. Добавьте элемент управления Button с именем Button1 в Formи отслеживайте событие Click. Дополнительные сведения о событиях мониторинга см. в разделе События.

  7. Добавьте следующий код в обработчик событий 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
    

Надежное программирование

Всегда проверяйте значение Document перед попыткой получить его. Если текущая страница еще не завершила загрузку, Document или один или несколько дочерних объектов могут не быть инициализированы.

См. также