如何确定加载的页面是否是System.Windows.Forms.WebBrowser中的错误页面或有效页面?

时间:2012-01-24 13:34:02

标签: c# .net winforms

我正在使用

System.Windows.Forms.WebBrowser

用C#控制显示一些页面。当用户点击不存在的页面的网址时,我想做一些自定义工作。

基本上我想在浏览器显示以下消息时设置一些值

The page cannot be displayed 
 The page you are looking for is currently unavailable. The Web site might be experiencing technical difficulties 

如何获取状态以便我可以区分加载的页面和错误页面?

2 个答案:

答案 0 :(得分:2)

如果将WebBrowser强制转换为基础ActiveX实现,则可以访问NavigateError事件。

注意:您需要添加对SHDocVw的引用。令人困惑的是,这是在COM选项卡中,名称为“Microsoft Internet Controls”,路径为c:\ windows \ system32 \ ieframe.dll

 private void button1_Click(object sender, EventArgs e)
        {
            //Note: you need to wait until the ActiveXInstance property is initialised.
            var axWebBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
            axWebBrowser.NavigateError += axWebBrowser_NavigateError; 
            webBrowser1.Url = new Uri("http://www.thisisnotavaliddomain.com");
        }

        void axWebBrowser_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel)
        {
            //handle your error
        }

答案 1 :(得分:1)

您可以使用CreateSink控件上的WebBrowser方法访问基础WebBrowser ActiveX控件的NavigateError事件。 System.Windows.Forms.WebBrowser控件是WebBrowser ActiveX控件的托管包装器,但它不包含该ActiveX控件的所有功能。 {@ 1}}事件在非托管ActiveX Web浏览器控件上可用。 NavigateError将允许您扩展CreateSink控件的功能,以便您可以处理System.Windows.Forms.WebBrowser事件。

来自文档:

  

如果您熟悉使用的OLE开发,则此方法很有用   非托管的WebBrowser ActiveX控件,您想要扩展   Windows窗体WebBrowser控件的功能,这是一个   ActiveX控件的托管包装器。你可以用它   从ActiveX控件实现事件的可扩展性   不是由包装器控件提供的。

MSDN在这里有一个完整的例子:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.createsink.aspx