Sunday, March 6, 2011

Can I detect errors while using a .Net WebBrowser control?

I have an .Net Froms application that displays web pages through a WebBrowser control.

Is there anyway that I can detect if the control shows a 'Page not found' or 'Cannot display webpage' error? There doesn't seem to be any error event handlers.

From stackoverflow
  • The WebBrowser windows forms control is wrapper around Internet Explorer and it doesn't expose all the functionality of the underlying ActiveX control and particularly the NavigateError event. Here's a workaround:

    First add reference to SHDocVw.dll to your project (COM tab of Add Reference window). Then you can do the following to capture errors:

    private void button1_Click(object sender, EventArgs e)
    {
        SHDocVw.WebBrowser instance = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
        instance.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(instance_NavigateError);
        webBrowser1.Navigate("http://www.google.com/foo");
    }
    
    void instance_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel)
    {
        // Do whatever you want with the error            
    }
    
    tpower : Thanks, that's perfect! Nice answer.
  • Thanks this is great!

    The architect of System.Windows.Forms.WebBrowser must be a very optimistic person.

  • I found another way to solve this without setting a reference to the SHDocVw dll.

    See web browser CreateSink method on MSDN.

0 comments:

Post a Comment