Практическое руководство. Доступ к источнику HTML в управляемой объектной модели HTML-документа
Свойства DocumentStream и DocumentText элемента управления WebBrowser возвращают HTML-код текущего документа, как он существовал при первом отображении. Однако при изменении страницы с помощью вызовов методов и свойств, таких как AppendChild и InnerHtml, эти изменения не будут отображаться при вызове DocumentStream и DocumentText. Чтобы получить наиболее up-to-date HTML-источник для DOM, необходимо вызвать свойство OuterHtml в элементе HTML.
В следующей процедуре показано, как получить динамический источник и отобразить его в отдельном контекстном меню.
Получение динамического источника с помощью свойства OuterHtml
Создайте новое приложение Windows Forms. Начните с одного Form. Назовите его
Form1
.Размещайте элемент управления WebBrowser в приложении Windows Forms и назовите его
WebBrowser1
. Дополнительные сведения можно найти в разделе «Добавление функциональности веб-браузера в приложения Windows Forms».Создайте второй Form в приложении с именем
CodeForm
.Добавьте элемент управления RichTextBox для
CodeForm
и задайте для свойства Dock значениеFill
.Создайте общедоступное свойство в
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
Добавьте элемент управления Button с именем
Button1
в Formи отслеживайте событие Click. Дополнительные сведения о событиях мониторинга см. в разделе События.Добавьте следующий код в обработчик событий 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 или один или несколько дочерних объектов могут не быть инициализированы.
См. также
.NET Desktop feedback