views:

318

answers:

6

Well, I'm using a simple webbrowser control to browse to a page, so I need to change the Text of the form while doing so. I'm using -

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    this.Text += " - " + webBrowser1.Document.Domain;
}

but using a breakpoint, i noticed that, this event is firing twice. I even tried _Navigated() event. it also fired twice. Resulting the title to "Webber - google.co.in - google.co.in" ..

I also noticed that this event fired several times while loading msn.com.. I'm trying to change the text of the form only when the page has finished loading totally..

Any remedy?

+1  A: 

It gets fired once per frame.

jeffamaphone
A: 

Every time a frame loads, the event is fired.

Also, before you even go there, the IsBusy property will only be True whilst the first frame has not loaded.

Try this:

void BrowserDocumentCompleted(object sender,
        WebBrowserDocumentCompletedEventArgs e)
{
  if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
    return; 

  //The page is finished loading 
}
Kyle Rozendo
This block is not firing at all..
Bibhas
I fear to ask, but did you link it up to the event? All it is, is the document completed after all.
Kyle Rozendo
A: 

How To Determine When a Page Is Done Loading in WebBrowser Control DocumentCompleted is WinForms' wrapper of the DocumentComplete evert, however WebBrowserDocumentCompletedEventArgs hides the sender parameter so you cannot tell which frame is raising the event. Alternatively you can check WebBrowser.ReadyState.

Sheng Jiang 蒋晟
A: 

You can check the WebBrowser.ReadyState when the event is fired:

if (browser.ReadyState != WebBrowserReadyState.Complete)
                return;

ReadyState will be set to Complete once the whole document is ready.

s7orm
A: 

Actually, it doesn't always get fired. Haven't figured out why not. I have a timer and just check the ReadyState repeatedly for a few minutes. (Using embedded browser control).

Jennifer Zouak
A: 

I have the same problem, and the reason was because, by default when you add the control it generate designer code like this.

this.webBrowser1.Url = new System.Uri("", System.UriKind.Relative);

and if you change the url after calling

InitializeComponent();
DmExplorerBrowser.Navigate("NewUrl.com");

It will load two different pages: About:Blank and NewUrl.com

Just, remove the designer code... and you'll stop the "double" event.

Fraga