程序员必知:WebBrowser脚本错误的完美解决方案

简介: 程序员必知: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 。但是在.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;

}//代码效果参考:http://www.ezhiqi.com/bx/art_67.html

3、上面的方法对于多个框架嵌套等等的情形还是不能很好的解决。

为了彻底解决这个问题,我们借助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);

}//代码效果参考:http://www.ezhiqi.com/bx/art_263.html

protected override void DetachInterfaces()

{

Iwb2 = null;

base.DetachInterfaces();

}//代码效果参考:http://www.ezhiqi.com/bx/art_5461.html

}

-----

作者:jxufewbt

来源:CSDN

原文:

版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
存储 iOS开发
iOS 内购 payment.applicationUsername 的坑
iOS 内购 payment.applicationUsername 的坑
715 0
|
存储 Java 关系型数据库
JPA 注解及主键生成策略使用指南
JPA 注解及主键生成策略使用指南
972 0
|
传感器
Arduino光敏传感器控制LED灯亮度
Arduino光敏传感器控制LED灯亮度
|
运维 安全 数据可视化
免费托管代码到云效代码管理Codeup
本场景介绍如何提交代码到云效代码管理Codeup。云效Codeup提供免费、不限容量的云上代码托管服务,您无需担心计费问题。
|
10月前
|
算法 测试技术 编译器
使用 Synopsys VCS 生成 SystemVerilog DPI 组件的 HDL 验证器,将 SystemVerilog DPI 组件从 MATLAB 生成用于 Synopsys VCS 模拟
使用 Synopsys VCS 生成 SystemVerilog DPI 组件的 HDL 验证器,将 SystemVerilog DPI 组件从 MATLAB 生成用于 Synopsys VCS 模拟
376 0
|
图形学
Unity 打开内嵌网页
要使用Embedded Browser插件实现网页嵌入功能,首先需下载插件(可从商店或指定地址获取)。安装后,通过将HTML文件放入BrowserAssets文件夹并修改URL前缀为`localGame://`来快速加载本地页面。设置时,在导入的BrowserGUI预设中配置URL即可。此外,可通过编写脚本添加按钮点击事件打开指定网页,并调整浏览器缩放比例。插件下载地址:https://download.csdn.net/download/qq_42603590/13958459。
|
传感器 负载均衡 物联网
MQTT v5共享订阅是怎么回事?如何使用共享订阅提高消息订阅的灵活性和可伸缩性?
MQTT v5共享订阅是怎么回事?如何使用共享订阅提高消息订阅的灵活性和可伸缩性?
1176 1
|
存储 前端开发 安全
【面试题】: bs架构与cs架构的区别以及各自优缺点
bs架构与cs架构的区别以及各自优缺点
9118 0
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
599 2

热门文章

最新文章