WebBrowser中的脚本错误处理

本文介绍了两种处理WebBrowser控件中脚本错误的方法:一是通过捕获并阻止错误传播;二是通过自定义MyWebBrowser类,利用SHDocVw.IWebBrowser2.Silent属性来避免错误弹窗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebBrowser中的脚本错误处理 

 

 


  当IE浏览器遇到时脚本错误,左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。但是WebBrowser控件则没有这么聪明,它会弹出错误信息框,使得程序显的很不友好,而且会让一些自动执行的程序暂停。虽然WebBrowser提供了ScriptErrorsSuppressed属性,经过尝试,结果是令人遗憾的,通过设置该属性可以解决部分问题,但不能彻底解决。在此探讨两种解决方案:一是通过截获WebBrowser.Document.Window.Error事件,并阻止WebBrowser继续处理错误来解决。如下: 
    //注册捕获控件的错误的处理事件 
    this.WebBrowser.Document.Window.Error += 
      new HtmlElementErrorEventHandler(Window_Error); 
    //对错误进行处理 
    void Window_Error(object sender, HtmlElementErrorEventArgs e) 
    { 
        e.Handled = true; // 阻止其他地方继续处理 
    } 
上面的方法可以解决大部分问题,但对于多个框架嵌套等等的情形还是不能很好的解决,于是只能自己动手封装一个MyWebBrowser了,然后用我们自己的MyWebBrowser来替代WebBrowser。如下: 
public class MyWebBrowser : System.Windows.Forms.WebBrowser 

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


这种方法能能很好的解决问题,其实使用过非托管WebBrowser的朋友肯定看出来了,实际上是通过引用SHDocVw绕过托管代码,直接SHDocVw.IWebBrowser2.Silent = true,最原始的也是最有效的。 

==================以上网上原话 
转:http://blog.youkuaiyun.com/freeliver54/archive/2009/03/26/4610788.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值