CDHtmlDialog 如何 屏蔽脚本错误
来源:互联网 发布:威露士极是洗发水 知乎 编辑:程序博客网 时间:2024/05/17 04:52
前言:
在Windows客户端程序中展示网页,以前常用CHtmlView。最近发现高版本VS中有CDHtmlDialog,试了一下,发现更好用。就只说 JS 与 C++ 代码互相调用方面,基本都是两三行语句搞定,是比CHtmlView方便了太多。
正文:
CDHtmlDialog 如何 屏蔽脚本错误呢?网上搜了下,有一种解决办法是这样的(CMyDialog是 自定义的CDHtmlDialog的子类):
BOOL CMyDialog::OnInitDialog(){ ... m_pBrowserApp->put_Silent(VARIANT_TRUE);}
经测试,没有效果(win7 + vs2013)
网上搜了半天也尝试了很多,终于发现一个有效的办法。如果在web页面上,加上这一段:
<script type="text/javascript"> function MyErrorFunc(){ return true; } window.onerror = MyErrorFunc</script>就能屏蔽脚本错误弹窗了。猜测这相当于用自己的实现重写web默认onerror函数。所以如果能在所有网页中加上这一段脚本,就能实现目的了。那客户端如何实现呢?
看代码:
思路:在页面加载完毕(OnNavigateComplete)时,注入脚本(屏蔽报错)
void CMyDialog::OnNavigateComplete(LPDISPATCH pDisp, LPCTSTR szUrl){CDHtmlDialog::OnNavigateComplete(pDisp, szUrl);SuppressScriptError(); // 屏蔽脚本报错}void CMyDialog::SuppressScriptError(){// 要执行的屏蔽报错脚本CString strScript = _T("window.onerror=function myonerror(){return true}"); CString strLanguage("JavaScript");ExecuteScript(strScript, strLanguage);}void CMyDialog::ExecuteScript(CString &strScript, CString &strLanguage){IHTMLDocument2* pIHtmlDoc = NULL;GetDHtmlDocument(&pIHtmlDoc);if (!pIHtmlDoc) return;IHTMLWindow2* pIhtmlwindow2 = NULL;pIHtmlDoc->get_parentWindow(&pIhtmlwindow2);if (!pIhtmlwindow2) return;BSTR bstrScript = strScript.AllocSysString();BSTR bstrLanguage = strLanguage.AllocSysString();VARIANT pRet;// 注入脚本到当前页面pIhtmlwindow2->execScript(bstrScript, bstrLanguage, &pRet);::SysFreeString(bstrScript);::SysFreeString(bstrLanguage);pIhtmlwindow2->Release();}
经测试,有效(win7 + vs2013)
参考资料:https://www.douban.com/note/188909792/
阅读全文
1 0
- CDHtmlDialog 如何 屏蔽脚本错误
- 屏蔽网页脚本错误
- 脚本屏蔽页面错误
- 屏蔽js错误脚本
- 屏蔽脚本错误
- CDHtmlDialog屏蔽网页右键菜单
- 如何屏蔽javaScript错误
- 如何屏蔽JS错误
- 屏蔽/自定义JavaScript脚本错误
- CHtmlView中屏蔽脚本错误
- 关于屏蔽CHtmlView脚本错误
- vb 屏蔽js脚本错误
- C# webbroswer屏蔽脚本错误
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- WebBrowser和AxWebBrowser屏蔽网页脚本错误
- WebBrowser或CHtmlView中屏蔽脚本错误
- 属性动画
- onclick 事件 和click()的区别
- LeetCode 46 Permutations
- 浙大PAT甲级-1011
- Windows 7系统安装MySQL5.5.21图解
- CDHtmlDialog 如何 屏蔽脚本错误
- Postgresl选择正确的关闭模式
- Android开发笔记(十六)秋千摇摆动画SwingAnimation
- AES(Rijndael算法)
- Netty ByteBuf
- LeetCode 22 Generate Parentheses
- Linux按键驱动程序设计(2)-Linux中断处理程序
- 架构师之路(十一)
- select 动态改变显示不同内容