如何处理WPF WebBrowser控件导航exception

假设WPF WebBrowser control显示一些导航错误,并且页面未显示。

所以WPF WebBrowser control有一个例外。

我在这里发现了一些类似的问题,但这不是我需要的。

事实上,我需要一些方法和对象,有一个例外,以获得它如何。

我们如何处理它?

谢谢!

PS WinForm WebBrowser控件有一些方法……我们可以为WPF WebBrowser控件做类似的事情吗?

 public Form13() { InitializeComponent(); this.webBrowser1.Navigate("http://blablablabla.bla"); SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)this.webBrowser1.ActiveXInstance; axBrowser.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(axBrowser_NavigateError); } void axBrowser_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel) { if (StatusCode.ToString() == "404") { MessageBox.Show("Page no found"); } } 

PS#2在WPF App下托管WinForm WebBrowser控件不是我认为的答案。

我正在努力解决类似的问题。 当计算机失去互联网连接时,我们希望以一种很好的方式处理它。

由于缺乏更好的解决方案,我连接了WebBrowser的Navigated事件并查看文档的url。 如果它是re​​s://ieframe.dll我非常有信心发现了一些错误。

也许可以查看文档并查看服务器是否返回404。

 private void Navigated(object sender, NavigationEventArgs navigationEventArgs) { var browser = sender as WebBrowser; if(browser != null) { var doc = AssociatedObject.Document as HTMLDocument; if (doc != null) { if (doc.url.StartsWith("res://ieframe.dll")) { // Do stuff to handle error navigation } } } } 

这是一个老问题,但由于我刚刚经历过这个问题,我可能会分享。 首先,我实施了Markus的解决方案,但由于我们的防火墙重新映射了403个消息页面,因此我想要更好一些。

我在这里找到了一个答案(amoungst其他地方),建议使用NavigationService,因为它有一个NavigationFailed事件。

在您的XAML中,添加:

  

在代码隐藏的构造函数中,添加:

 frame.Navigated += new System.Windows.Navigation.NavigatedEventHandler(frame_Navigated); frame.NavigationFailed += frame_NavigationFailed; frame.LoadCompleted += frame_LoadCompleted; frame.NavigationService.Navigate(new Uri("http://theage.com.au")); 

处理程序现在可以处理导航失败或成功导航:

 void frame_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e) { e.Handled = true; // TODO: Goto an error page. } private void frame_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) { System.Diagnostics.Trace.WriteLine(e.WebResponse.Headers); } 

BTW:.Net 4.5框架

这里也可以使用dynamic方法。

 wb.Navigated += delegate(object sender, NavigationEventArgs args) { dynamic doc = ((WebBrowser)sender).Document; var url = doc.url as string; if (url != null && url.StartsWith("res://ieframe.dll")) { // Do stuff to handle error navigation } };