如何处理WPF WebBrowser控件导航异常

Dev*_*per 9 .net c# wpf

假设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");
     }
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*kus 10

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

由于缺乏更好的解决方案,我连接了WebBrowser的Navigated事件并查看文档的url.如果是res://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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


dav*_*ave 7

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

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

在您的XAML中,添加:

<Frame x:Name="frame"/>
Run Code Online (Sandbox Code Playgroud)

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

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"));
Run Code Online (Sandbox Code Playgroud)

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

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);
}
Run Code Online (Sandbox Code Playgroud)

BTW:.Net 4.5框架