CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
2015-01-01 23:04
351 查看
转自http://www.cnblogs.com/thinkingfor/archive/2010/11/10/1873689.html
CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
当WebBrowser控件(CDHtmlDialog自动创建了WebBrowser控件)加载的网页中含有错误Javascript代码时默认情况下控件会弹出错误信息提示对话框,相对于用户体验来说这样的提示完全不是开发人员想要的,针对这个问题有两个解决方案,一是完全屏蔽掉错误提示,二是控制错误的提示并且记录错误信息同时也可以控制出现错误后Javascript是否继续执行。1、屏蔽错误信息提示
2、控制错误提示并进行记录
这要比第一种方法复杂上许多,简短的来说就是自定义COleControlSite类并实现IOleCommandTarget接口,IOleCommandTarget接口是错误控制的关健,错误发生时会触发此接口的Exec函数并为nCmdID参数赋值为OLECMDID_SHOWSCRIPTERROR,这样就可以得到错误信息了。
STDMETHOD宏定义为virtual __declspec(nothrow) HRESULT __stdcall,该宏定义函数为虚函数返回值为HRESULT,函数调用约定为__stdcall,并且在此函数上禁止异常。__declspec(nothrow)用定告诉编译器它修饰的函数以及此函数调用的函数不会产生C++异常调用从可以优化代码性能和代码尺寸(默认情况下C++编译器为了进行异常处理会在拥有throw调用的函数中自动生成相关的异常处理代码)。通常情况下HRESULT返回值就表达了错误信息,HRESULT是个32位值,不同的位域用于不同的目的,也可以使用自定义的位域,具体的信息可以参考http://en.wikipedia.org/wiki/HRESULT。由于COM本身的语言中立性所以不应该在COM组件对外公布的信息中掺杂特定语言相关的特性。如果需要提供更详尽的错误信息那么应该实现COM的IErrorInfo接口。言归正传以下是CMyControlSite的类实现代码
BEGIN_INTERFACE_MAP(CMyControlSite, COleControlSite) INTERFACE_PART(CMyControlSite, IID_IOleCommandTarget, OleCommandTarget)
METHOD_PROLOGUE_EX_宏定义了pThis指针来指向外层类。
以上代码基于VS2008,由于不同版本的VS所带的MFC库版本不尽一致所以需要根本具体的版本来处理,目前已知的不同部分主要集中在CreateControlSite上。
相关文章推荐
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- CDHtmlDialog探索----Javascript与窗体交互
- CDHtmlDialog探索----Javascript与窗体交互
- CDHtmlDialog探索----Javascript与窗体交互
- CDHtmlDialog调用网页内部Javascript的两种方法
- CDHtmlDialog调用网页内部Javascript的两种方法
- CDHtmlDialog探索----Javascript与窗体交互
- CDHtmlDialog探索----Javascript与窗体交互
- CDHtmlDialog探索----Javascript与窗体交互
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- CDHtmlDialog 与 网页交互技巧
- 对于CDHtmlDialog和JavaScript、HTML配合使用的一些技术总结
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- CDHtmlDialog 与 网页交互技巧
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应