WebBrowser脚本错误的完美解决方案
2015-10-28 04:34
357 查看
当IE浏览器遇到脚本错误时浏览器,左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。当我们使用WebBrowser控件时有错误信息框弹出,这样程序显的很不友好,而且会让一些自动执行的程序暂停。我看到有人采取的解决方案是做一个窗体杀手程序来关闭弹出的窗体。今天探讨的方法是从控件解决问题。
1、SHDocVw.dll 在COM时代我们使用的WebBrowser控件是SHDocVw.dll。屏蔽错误信息的方法很简单使用下面的一句就可以搞定。WebBrowser1.Silent = true
2、.Net中 在.Net中提供了托管的WebBrowser可供我们使用,当然我们仍然可以在.Net中使用COM组建SHDocVw.dll,如果使用SHDocVw.dll 处理错误方式和上面的方法一样。但如果我们是使用.Net组件如何解决这个问题呢?这个组件给我们提供了一个方法ScriptErrorsSuppressed 。但是在.net framework2.0中他是不起作用的,据说在低版本中使用如下的方式解决 webBrowser1.ScriptErrorsSuppressed = true(据说在.net
framework2.0以前是这样,我没有使用过) 那么在.net framework2.0中如何解决这个问题呢? 有一种方法不能彻底解决,可以部分解决问题这里也介绍给大家。
//捕获控件的错误 this.WebBrowser.Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
//对错误进行处理 void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
// 自己的处理代码
e.Handled = true;
}
上面的方法对于多个框架嵌套等等的情形还是不能很好的解决。 为了彻底解决这个问题,我们借助AxWebBrowser来解决WebBrowser的问题。 我们定义一个自己的类,他的父类是WebBrowser,以后使用这个类就可以了。在这个类的定义中需要引用SHDocVw。
class EWebBrowser : System.Windows.Forms.WebBrowser
{
SHDocVw.IWebBrowser2 Iwb2;
protected override void AttachInterfaces(object nativeActiveXObject)
{
Iwb2 = (SHDocVw.IWebBrowser2)nativeActiveXObject;
Iwb2.Silent = true;
base.AttachInterfaces(nativeActiveXObject);
}
protected override void DetachInterfaces()
{
Iwb2 = null;
base.DetachInterfaces();
}
}
从上面的代码可以看出EWebBrowser截取了AxWebBrowser接口,并利用了AxWebBrowser的属性Silent来实现。
1、SHDocVw.dll 在COM时代我们使用的WebBrowser控件是SHDocVw.dll。屏蔽错误信息的方法很简单使用下面的一句就可以搞定。WebBrowser1.Silent = true
2、.Net中 在.Net中提供了托管的WebBrowser可供我们使用,当然我们仍然可以在.Net中使用COM组建SHDocVw.dll,如果使用SHDocVw.dll 处理错误方式和上面的方法一样。但如果我们是使用.Net组件如何解决这个问题呢?这个组件给我们提供了一个方法ScriptErrorsSuppressed 。但是在.net framework2.0中他是不起作用的,据说在低版本中使用如下的方式解决 webBrowser1.ScriptErrorsSuppressed = true(据说在.net
framework2.0以前是这样,我没有使用过) 那么在.net framework2.0中如何解决这个问题呢? 有一种方法不能彻底解决,可以部分解决问题这里也介绍给大家。
//捕获控件的错误 this.WebBrowser.Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
//对错误进行处理 void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
// 自己的处理代码
e.Handled = true;
}
上面的方法对于多个框架嵌套等等的情形还是不能很好的解决。 为了彻底解决这个问题,我们借助AxWebBrowser来解决WebBrowser的问题。 我们定义一个自己的类,他的父类是WebBrowser,以后使用这个类就可以了。在这个类的定义中需要引用SHDocVw。
class EWebBrowser : System.Windows.Forms.WebBrowser
{
SHDocVw.IWebBrowser2 Iwb2;
protected override void AttachInterfaces(object nativeActiveXObject)
{
Iwb2 = (SHDocVw.IWebBrowser2)nativeActiveXObject;
Iwb2.Silent = true;
base.AttachInterfaces(nativeActiveXObject);
}
protected override void DetachInterfaces()
{
Iwb2 = null;
base.DetachInterfaces();
}
}
从上面的代码可以看出EWebBrowser截取了AxWebBrowser接口,并利用了AxWebBrowser的属性Silent来实现。
相关文章推荐
- Android Manifest 用法
- Android学习笔记(二九):嵌入浏览器
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- c#调用COM组件
- Patrol 7 架构下?的处理方法
- 中病毒后常用的解决方法病毒终极解决方案
- 浏览器 cookie 限制
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法