WebBrowser脚本错误的完美解决⽅案
当IE浏览器遇到脚本错误时浏览器,左下⾓会出现⼀个黄⾊图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。当我们使⽤WebBrowser控件时有错误信息框弹出,这样程序显的很不友好,⽽且会让⼀些⾃动执⾏的程序暂停。我看到有⼈采取的解决⽅案是做⼀个窗体杀⼿程序来关闭弹出的窗体。今天探讨的⽅法是从控件解决问题。
1、SHDocVw.dll
在COM时代我们使⽤的WebBrowser控件是SHDocVw.dll。屏蔽错误信息的⽅法很简单使⽤下⾯的⼀句就可以搞定。
WebBrowser1.Silent = true
2、.Net中
身份证制作在.Net中提供了托管的WebBrowser可供我们使⽤,当然我们仍然可以在.Net中使⽤COM组建SHDocVw.dll,如果使⽤SHDocVw.dll
处理错误⽅式和上⾯的⽅法⼀样。但如果我们是使⽤.Net组件如何解决这个问题呢?
这个组件给我们提供了⼀个⽅法ScriptErrorsSuppressed 。但是在 framework2.0中他是不起作⽤的,据说在低版本中使⽤如下的⽅式解决
webBrowser1.ScriptErrorsSuppressed = true(据说在 framework2.0以前是这样,我没有使⽤过)
那么在 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来实现。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论