10

いくつか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#2WPFアプリでWinFormWebBrowserコントロールをホストすることは、私が思う答えではありません。

4

4 に答える 4

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
            }
        }
    }
}
于 2013-02-07T10:17:09.450 に答える
7

それは古い質問ですが、私はこれに苦しんでいたので、共有したほうがよいと思いました. まず、Markus のソリューションを実装しましたが、ファイアウォールが 403 メッセージ ページを再マップするため、もう少し改善したいと考えました。

ここで(他の場所の中でも) 、イベントNavigationServiceがあるので使用することを提案する答えを見つけましたNavigationFailed

XAML で、次を追加します。

<Frame x:Name="frame"/>

コード ビハインドのコンストラクターで、以下を追加します。

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);
}

ところで:これは.Net 4.5フレームワークにあります

于 2015-05-01T00:20:46.577 に答える