2012-02-02 3 views
1

У меня есть форма с webbrowser. События: Navigating, Navigated и DocumentCompleted прилагаются.Почему у управления WebBrowser это странное поведение?

Это то, что я получаю после того, как он говорил .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/ 

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

Код только показывает параметр e.Url каждого обработчика события.

+0

Использование 'о: blank' может означать много чего. Это происходит, если вы переходите на другой сайт помимо Google? Какая версия IE находится в системе? – lukiffer

+0

Я предполагаю, что Google использует iframes или теги объектов, которые запускают навигационное событие. – Candide

ответ

5

Оказывается, что автоматическая навигация до: пусто известный «одеяло безопасности» сортов, используемых WebBrowser объекта, чтобы обеспечить объект HTML является действительным, прежде чем пытаться загрузить страницу вы запрашиваете, как описано в this MSDN article:

[...] Метод IWebBrowser2 :: Navigate2 используется для перехода на страницу: blank. Переход на эту пустую страницу гарантирует, что MSHTML загружен и что HTML-элементы доступны через объектную модель Dynamic 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