我正在使用
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
如何获取状态以便我可以区分加载的页面和错误页面?
答案 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