Почему элемент управления WebBrowser имеет такое странное поведение? - PullRequest
1 голос
/ 02 февраля 2012

У меня есть форма с webbrowser.События: Navigating, Navigated и DocumentCompleted прилагаются.

Это то, что я получаю после сообщения об этом .Navigate(new Url("http://google.com"));

20:42:42:036: 1. Navigating to: http://google.com/
20:42:42:545: 2. Navigated: http://www.google.com/
20:42:42:854: 3. Navigating to: about:blank
20:42:43:002: 4. Navigated: about:blank
20:42:43:004: 5. Loaded: about:blank
20:42:43:158: 6. Loaded: http://www.google.com/

Может кто-нибудь объяснить, почему я получаюthis about:blank stuff?

Код просто отображает параметр e.Url каждого обработчика событий.

1 Ответ

5 голосов
/ 02 февраля 2012

Похоже, что автоматическая навигация к about: blank - это известное «защитное одеяло», используемое объектом WebBrowser для проверки правильности объекта HTML перед попыткой загрузки запрашиваемой страницы, как описано в эта статья MSDN :

[...] метод IWebBrowser2 :: Navigate2 используется для перехода на пустую страницу about :. Переход на эту пустую страницу гарантирует, что MSHTML загружен и что элементы HTML доступны через объектную модель динамического HTML (DHTML).

Также должно работать событие DocumentCompleted. Вы уверены, что ваши мероприятия больше ничего не делают?

Я пробовал этот простой код, и он работает как положено:

namespace CSharpWindowsPractice
{
    using System;
    using System.Windows.Forms;

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            this.listBox1.Items.Add("Navigated to: " + e.Url);
        }

        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            this.listBox1.Items.Add("Navigating to: " + e.Url);
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            this.listBox1.Items.Add("DocumentCompleted: " + e.Url);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.webBrowser1.Navigate(new Uri(@"http://google.com"));
        }
    }
}

После нажатия на кнопку вы получите следующее:

enter image description here

...