本篇文章主要介绍了"CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理",主要涉及到方面的内容,对于Javascriptjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
当WebBrowser控件(CDHtmlDialog自动创建了WebBrowser控件)加载的网页中含有错误Javascript代码时默认情况下控件会弹出错误信...
当WebBrowser控件(CDHtmlDialog自动创建了WebBrowser控件)加载的网页中含有错误Javascript代码时默认情况下控件会弹出错误信息提示对话框,相对于用户体验来说这样的提示完全不是开发人员想要的,针对这个问题有两个解决方案,一是完全屏蔽掉错误提示,二是控制错误的提示并且记录错误信息同时也可以控制出现错误后Javascript是否继续执行。
1、屏蔽错误信息提示
1
m_pBrowserApp->put_Silent(VARIANT_TRUE);
在CDHtmlDialog::OnInitDialog()的代码中首先了创建WebBrowser控件,然后把控件的Browser对象赋值给m_pBrowserApp(这是CDHtmlDialog完成的不需要自己处理)。WebBrowser的put_Silent函数在官方给出的说明是禁用所有的对话框,但例外情况是它不会影响SSL安全认证需要的进示对话框。绝大多数情况下这就可以解决问题了,记得很久以前我遇到过一种情况就是虽然调用了put_Silent但是还是有极个别的js错误是无法屏蔽掉的依然会显示出来(在网页含有嵌套页面时会错误无法屏蔽,不知道是否还有其它情况),现在找不到这样的网页了,如果谁遇到这种情况了建议给我发上个URL让我也重温一下当年阳光灿烂的时刻。
2、控制错误提示并进行记录
这要比第一种方法复杂上许多,简短的来说就是自定义COleControlSite类并实现IOleCommandTarget接口,IOleCommandTarget接口是错误控制的关健,错误发生时会触发此接口的Exec函数并为nCmdID参数赋值为OLECMDID_SHOWSCRIPTERROR,这样就可以得到错误信息了。
IOleCommandTarget : public IUnknown
{
public:
virtual /* [input_sync] */ HRESULT STDMETHODCALLTYPE QueryStatus(
/* [unique][in] */ __RPC__in_opt const GUID *pguidCmdGroup,
/* [in] */ ULONG cCmds,
/* [out][in][size_is] */ __RPC__inout_ecount_full(cCmds) OLECMD prgCmds[ ],
/* [unique][out][in] */ __RPC__inout_opt OLECMDTEXT *pCmdText) = 0;
virtual HRESULT STDMETHODCALLTYPE Exec(
/* [unique][in] */ __RPC__in_opt const GUID *pguidCmdGroup,
/* [in] */ DWORD nCmdID,
/* [in] */ DWORD nCmdexecopt,
/* [unique][in] */ __RPC__in_opt VARIANT *pvaIn,
/* [unique][out][in] */ __RPC__inout_opt VARIANT *pvaOut) = 0;
};
现在我们开始实现自定义的COleControlSite
class CMyControlSite : public COleControlSite
{
public:
CMyControlSite(COleControlContainer *pCntr):COleControlSite(pCntr) {}
protected: