C# WPF-如何知道浏览器加载网页时是否有错误?
WPF应用程序-我想知道网页加载是成功还是失败。也就是说,我应该能够知道浏览器是否有类似“此页面无法显示”的错误。我正在我的应用程序中托管一种形式的web浏览器控件。请提供帮助。您可以添加对C# WPF-如何知道浏览器加载网页时是否有错误?,c#,.net,wpf,C#,.net,Wpf,WPF应用程序-我想知道网页加载是成功还是失败。也就是说,我应该能够知道浏览器是否有类似“此页面无法显示”的错误。我正在我的应用程序中托管一种形式的web浏览器控件。请提供帮助。您可以添加对Microsoft Internet控件(SHDocVw)的引用。然后,您可以从wpf web浏览器控件获取activeX浏览器控件并订阅其事件 导航过程中发生错误时,将引发该事件 void MainWindow_Loaded(object sender, RoutedEventArgs e) { v
Microsoft Internet控件(SHDocVw)
的引用。然后,您可以从wpf web浏览器控件获取activeX浏览器控件并订阅其事件
导航过程中发生错误时,将引发该事件
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var axBrowser = this.wpfWebBrowser1.GetType().InvokeMember("ActiveXInstance",
BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
null, wpfWebBrowser1, new object[] { }) as SHDocVw.WebBrowser;
axBrowser.NavigateError += axBrowser_NavigateError;
this.wpfWebBrowser1.Navigate("http://google.com/xxxxxxx"); //status: 404
//this.wpfWebBrowser1.Navigate("http://elgoog.com"); //status: -2146697211
}
void axBrowser_NavigateError(object pDisp, ref object URL, ref object Frame,
ref object StatusCode, ref bool Cancel)
{
MessageBox.Show(StatusCode.ToString());
}
在上面的代码中,我假设您有一个名为wpfWebBrowser1
不要忘记使用System.Reflection添加
代码>
不要忘记将main window\u Loaded
分配给窗口的Loaded
事件。
别忘了添加对Microsoft Internet控件的引用您可以添加对Microsoft Internet控件(SHDocVw)
的引用。然后,您可以从wpf web浏览器控件获取activeX浏览器控件并订阅其事件
导航过程中发生错误时,将引发该事件
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var axBrowser = this.wpfWebBrowser1.GetType().InvokeMember("ActiveXInstance",
BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
null, wpfWebBrowser1, new object[] { }) as SHDocVw.WebBrowser;
axBrowser.NavigateError += axBrowser_NavigateError;
this.wpfWebBrowser1.Navigate("http://google.com/xxxxxxx"); //status: 404
//this.wpfWebBrowser1.Navigate("http://elgoog.com"); //status: -2146697211
}
void axBrowser_NavigateError(object pDisp, ref object URL, ref object Frame,
ref object StatusCode, ref bool Cancel)
{
MessageBox.Show(StatusCode.ToString());
}
在上面的代码中,我假设您有一个名为wpfWebBrowser1
不要忘记使用System.Reflection添加代码>
不要忘记将main window\u Loaded
分配给窗口的Loaded
事件。
别忘了添加一个参考Microsoft Internet Controls
,很遗憾,您不能添加(除非您解决了附加到导航
和加载
的问题,并假设它在超时后失败)NavigateError
COM对象公开的事件不会附加到internalWebBrowserEvent
类中的任何内容,除非您重写他们的一些代码以附加接收器并使用反射来读取HostingAdaptor
属性,你运气不好。如果你检测到导航错误就够了吗?@AdrianoRepetti-是的,你是对的,我用了很多小技巧,但问题并没有解决。我尝试读取浏览器文档中的错误文本,也尝试在documentcompleted中创建新的请求和响应,但这两种方法都不理想。无论如何,感谢您的回复。@RezaAghaei-NavigateError事件未附加在内部WebBrowserEvent中。所以我找不到它。你可以找到它,检查下面的答案。不幸的是,你不能(除非你解决了附加到导航
和加载
的问题,并假设它在超时后失败)NavigateError
COM对象公开的事件不会附加到internalWebBrowserEvent
类中的任何内容,除非您重写他们的一些代码以附加接收器并使用反射来读取HostingAdaptor
属性,你运气不好。如果你检测到导航错误就够了吗?@AdrianoRepetti-是的,你是对的,我用了很多小技巧,但问题并没有解决。我尝试读取浏览器文档中的错误文本,也尝试在documentcompleted中创建新的请求和响应,但这两种方法都不理想。无论如何,感谢您的回复。@RezaAghaei-NavigateError事件未附加在内部WebBrowserEvent中。所以我找不到它。你可以找到它,检查下面的答案。是的,但有一个错误。找不到类型或命名空间名称“SHDocVw”(是否缺少using指令或程序集引用?)。请添加对Microsoft Internet控件的引用。
。太好了。最后这对我很有用。感谢您的帮助。在代码片段中,什么是this.wb
和wpfWebBrowser1
?它们是WPF网络控制的同一个实例吗?@LeonardoSeccia是的,在这里重命名是我的错误。谢谢你对此发表评论。是的,但有一个错误。找不到类型或命名空间名称“SHDocVw”(是否缺少using指令或程序集引用?)。请添加对Microsoft Internet控件的引用。
。太好了。最后这对我很有用。感谢您的帮助。在代码片段中,什么是this.wb
和wpfWebBrowser1
?它们是WPF网络控制的同一个实例吗?@LeonardoSeccia是的,在这里重命名是我的错误。谢谢你发表评论。