WebBrowser控件如何屏蔽javascript错误

WebBrowser 如何屏蔽javascript错误,我搜啊搜啊,搜到了

http://www.cnblogs.com/zhangqingping/archive/2009/06/16/1504260.html 和 http://support.microsoft.com/kb/261003

http://www.codeproject.com/Articles/4003/Popup-Window-Blocker

 

#pragma once
                     
#include <mshtmhst.h>
                     
class CNoScriptErrorHelper
    : public IDocHostUIHandler
    , public IOleCommandTarget
{
                     
public:     
    HRESULT STDMETHODCALLTYPE SetHandler(CComPtr<IWebBrowser2> spWebBrowser)
    {
        HRESULT result = E_NOINTERFACE;
        CComPtr<IDispatch> spDisp;
        HRESULT hr = spWebBrowser->get_Document(&spDisp);
        if (SUCCEEDED(hr) && spDisp)
        {
            // If this is not an HTML document (e.g., it's a Word doc or a PDF), don't sink.
            CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spHTML(spDisp);
            if (spHTML)
            {
                // Get pointers to default interfaces
                CComQIPtr<IOleObject, &IID_IOleObject> spOleObject(spDisp);
                if (spOleObject)
                {
                    CComPtr<IOleClientSite> spClientSite;
                    hr = spOleObject->GetClientSite(&spClientSite);
                    if (SUCCEEDED(hr) && spClientSite)
                    {
                        m_spDefaultDocHostUIHandler = spClientSite;
                        m_spDefaultOleCommandTarget = spClientSite;
                    }
                }
                     
                // Set this class to be the IDocHostUIHandler
                CComQIPtr<ICustomDoc, &IID_ICustomDoc> spCustomDoc(spDisp);
                if (spCustomDoc) 
                {
                    spCustomDoc->SetUIHandler(this);
                    result = S_OK;
                }
            }
        } 
        return result;
    }
public:
    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
    {
        HRESULT result = S_OK;
                     
        if (IsBadWritePtr(ppvObject, sizeof(LPVOID)))
            result = E_INVALIDARG;
                     
        if (result == S_OK)
        {
            *ppvObject = NULL;
                     
            if ( IsEqualIID( riid, IID_IUnknown ) )
                *ppvObject = this;
            else if ( IsEqualIID( riid, IID_IDispatch ) )
                             *ppvObject = (IDispatch *) this;
            else if ( IsEqualIID( riid, IID_IDocHostUIHandler ) )
                *ppvObject = (IDocHostUIHandler *) this;
            else if ( IsEqualIID( riid, IID_IOleCommandTarget ) )
                *ppvObject = (IOleCommandTarget *) this;
            else
                result = E_NOINTERFACE;
        }
                     
        if (result == S_OK)
            this->AddRef();
                     
        return result;
    }
                     
    ULONG STDMETHODCALLTYPE AddRef(){
        InterlockedIncrement(&m_cRef);
        return m_cRef;
    }
                     
    ULONG STDMETHODCALLTYPE Release() {
        ULONG ulRefCount = InterlockedDecrement(&m_cRef);
        if(m_cRef == 0)
        {
            delete this;
        }
        return ulRefCount;
    }
                     
                     
    STDMETHOD(ShowContextMenu)(DWORD dwID, POINT FAR* ppt, IUnknown FAR* pcmdTarget, IDispatch FAR* pdispReserved)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->ShowContextMenu(dwID, ppt, pcmdTarget, pdispReserved);
        return S_FALSE;
    }
                     
    STDMETHOD(ShowUI)(DWORD dwID, IOleInPlaceActiveObject FAR* pActiveObject,
                      IOleCommandTarget FAR* pCommandTarget,
                      IOleInPlaceFrame  FAR* pFrame,
                      IOleInPlaceUIWindow FAR* pDoc)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->ShowUI(dwID, pActiveObject, pCommandTarget, pFrame, pDoc);
        return S_FALSE;
    }
                     
    STDMETHOD(GetHostInfo)(DOCHOSTUIINFO FAR *pInfo)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->GetHostInfo(pInfo);
        return S_OK;
    }
                     
    STDMETHOD(HideUI)(void)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->HideUI();
        return S_OK;
    }
                     
    STDMETHOD(UpdateUI)(void)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->UpdateUI();
        return S_OK;
    }
                     
    STDMETHOD(EnableModeless)(BOOL fEnable)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->EnableModeless(fEnable);
        return S_OK;
    }
                     
    STDMETHOD(OnDocWindowActivate)(BOOL fActivate)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->OnDocWindowActivate(fActivate);
        return S_OK;
    }
                     
    STDMETHOD(OnFrameWindowActivate)(BOOL fActivate)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->OnFrameWindowActivate(fActivate);
        return S_OK;
    }
                     
    STDMETHOD(ResizeBorder)(LPCRECT prcBorder, IOleInPlaceUIWindow FAR* pUIWindow, BOOL fFrameWindow)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->ResizeBorder(prcBorder, pUIWindow, fFrameWindow);
        return S_OK;
    }
                     
    STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, const GUID FAR* pguidCmdGroup, DWORD nCmdID)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->TranslateAccelerator(lpMsg, pguidCmdGroup, nCmdID);
        return E_NOTIMPL;
    }
                     
    STDMETHOD(GetOptionKeyPath)(LPOLESTR FAR* pchKey, DWORD dw)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->GetOptionKeyPath(pchKey, dw);
        return E_FAIL;
    }
                     
    STDMETHOD(GetDropTarget)(IDropTarget* pDropTarget, IDropTarget** ppDropTarget)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->GetDropTarget(pDropTarget, ppDropTarget);
        return S_OK;
    }
                     
    STDMETHOD(GetExternal)(IDispatch** ppDispatch)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->GetExternal(ppDispatch);
        return S_FALSE;
    }
                     
    STDMETHOD(TranslateUrl)(DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->TranslateUrl(dwTranslate, pchURLIn, ppchURLOut);
        return S_FALSE;
    }
                     
    STDMETHOD(FilterDataObject)(IDataObject* pDO, IDataObject** ppDORet)
    {
        if (m_spDefaultDocHostUIHandler)
            return m_spDefaultDocHostUIHandler->FilterDataObject(pDO, ppDORet);
        return S_FALSE;
    }
                     
    //
    // IOleCommandTarget
    //
    STDMETHOD(QueryStatus)(
        /*[in]*/ const GUID *pguidCmdGroup, 
        /*[in]*/ ULONG cCmds,
        /*[in,out][size_is(cCmds)]*/ OLECMD *prgCmds,
        /*[in,out]*/ OLECMDTEXT *pCmdText)
    {
        return m_spDefaultOleCommandTarget->QueryStatus(pguidCmdGroup, cCmds, prgCmds, pCmdText);
    }
    STDMETHOD(Exec)(
        /*[in]*/ const GUID *pguidCmdGroup,
        /*[in]*/ DWORD nCmdID,
        /*[in]*/ DWORD nCmdExecOpt,
        /*[in]*/ VARIANTARG *pvaIn,
        /*[in,out]*/ VARIANTARG *pvaOut)
    {
        if (nCmdID == OLECMDID_SHOWSCRIPTERROR)
        {
            // Don't show the error dialog, but
            // continue running scripts on the page.
            (*pvaOut).vt = VT_BOOL;
            (*pvaOut).boolVal = VARIANT_TRUE;
            return S_OK;
        }
        return m_spDefaultOleCommandTarget->Exec(pguidCmdGroup, nCmdID, nCmdExecOpt, pvaIn, pvaOut);
    }
private:
    // Default interface pointers
    CComQIPtr<IDocHostUIHandler, &IID_IDocHostUIHandler> m_spDefaultDocHostUIHandler;
    CComQIPtr<IOleCommandTarget, &IID_IOleCommandTarget> m_spDefaultOleCommandTarget;
    LONG m_cRef;
};

 使用方法:

 

class CBrowserView
	: public CWindowImpl<CBrowserView, CAxWindow>
	, public IDispEventImpl<_nDispatchID, CBrowserView, &DIID_DWebBrowserEvents2>
{
public:
    DECLARE_WND_SUPERCLASS(_T("BrowserView"), CAxWindow::GetWndClassName())
    CNoScriptErrorHelper m_helper;
    BEGIN_SINK_MAP(CBrowserView)
        SINK_ENTRY_EX(_nDispatchID, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnEventDocumentComplete)
    END_SINK_MAP()
    void __stdcall OnEventDocumentComplete(IDispatch* pDisp, VARIANT* URL)
    {
        CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> iwebBrowser(pDisp);
        m_helper.SetHandler(iwebBrowser);
    }
// Message map and handlers
    BEGIN_MSG_MAP(CBrowserView)
        MESSAGE_HANDLER(WM_CREATE, OnCreate)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
    END_MSG_MAP()
    LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
    {
        LRESULT lRet = DefWindowProc(uMsg, wParam, lParam);

        // Connect events
        CComPtr spWebBrowser2;
        HRESULT hRet = QueryControl(IID_IWebBrowser2, (void**)&spWebBrowser2);
        if(SUCCEEDED(hRet))
        {
            if(FAILED(DispEventAdvise(spWebBrowser2, &DIID_DWebBrowserEvents2)))
				ATLASSERT(FALSE);
        }

		// Set host flag to indicate that we handle themes
		CComPtr spHost;
		hRet = QueryHost(IID_IAxWinAmbientDispatch, (void**)&spHost);
		if(SUCCEEDED(hRet))
		{
			const DWORD _DOCHOSTUIFLAG_THEME = 0x40000;
			hRet = spHost->put_DocHostFlags(DOCHOSTUIFLAG_NO3DBORDER | _DOCHOSTUIFLAG_THEME);
			ATLASSERT(SUCCEEDED(hRet));
		}

		return lRet;
	}
	
	LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
	{
		// Disconnect events
		CComPtr spWebBrowser2;
		HRESULT hRet = QueryControl(IID_IWebBrowser2, (void**)&spWebBrowser2);
		if(SUCCEEDED(hRet))
			DispEventUnadvise(spWebBrowser2, &DIID_DWebBrowserEvents2);

		bHandled=FALSE;
		return 1;
	}
};

 

CBrowserView 创建窗口的时候用:

CBrowserView m_view;

m_view.Create(parentHWND, rcDefault, L"http://www.iteye.com", WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL);

 

从零到一:鲲鹏920服务器上的DeepSeek模型部署全流程解析 本文详细解析了在华为鲲鹏920服务器上部署DeepSeek模型的全流程,包括环境准备、模型服务框架部署、性能优化及生产环境方案。通过ARM架构优化和量化技术,显著提升模型推理效率,适用于企业级AI应用场景,助力国产化技术落地。 阅读详情

相关推荐

GPD源码分析

gpd使用示例 先看下面一段代码,为标准gpd算法的使用方法,可以看到输入为点云,cloud_camera_; 输入:std::unique_ptr<gpd::util::Cloud> cloud_camera_ 输出: std::vector<std::unique_ptr<gpd::candidate::Hand>> grasps; // detect grasp poses gpd对象:std::unique_ptr<gpd::GraspDetect.

weixin_41003113的博客 2335

屏蔽WebBrowser对Javascript的错误弹窗【转】

定义IOleCommandTarget接口、OLECMD类: public static class NativeMethods      {         public enum OLECMDF         {             // Fields             OLECMDF_DEFHIDEONCTXTMENU = 0x20,            

孙帅_我是程序员 1767

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

winform中WebBrowser屏蔽JS报错

winform的WebBrowser会调用ie内核来执行,但是在ie中js

惟楚有才 5336

ROS 2 Jazzy与Gazebo Harmonic仿真实战:从零搭建机器人仿真环境与高级应用

本文详细介绍了如何使用ROS 2 Jazzy和Gazebo Harmonic从零搭建机器人仿真环境,涵盖环境配置、传感器集成、多机器人协同和GPU加速优化等高级应用。通过实战案例和性能调优技巧,帮助开发者高效构建可靠的机器人仿真系统,提升开发效率。

h9j8k7l6m5n的博客 1220

TDSQL-单机安装

根据腾讯云官方要求,TDSQL安装至少需要三台机器。本人想要学习TDSQL但是没有足够的机器资源,经过仔细分析研究TDSQL安装过程,尝试发现单台机器也可以成功安装TDSQL,现将本人单台机器安装TDSQL的过程以及安装过程中遇到的问题在此分享。具体安装过程可参考腾讯官方文档,本文仅分享与官方文档不一致的步骤。

u012607648的博客 6812

VC与JavaScript交互(四) ———— WebBrowser或CHtmlView中轻松屏蔽脚本错误(JavaScript)

1.什么是javascript脚本错误 1.1    概述 JavaScript脚本错误包含“运行时错误”和“语法错误”。 1.2    JavaScript“语法错误” JavaScript语法错误是指当 JavaScript语句违反了 JavaScript脚本语言的一条或多条语法规则时导致的错误。JavaScript语法错误发生在程序编译阶段,在开始运行该程序之前。 1.3    J

L_Andy的专栏 6450

5分钟搞懂MSDNet:用Transformer实现小样本语义分割的保姆级教程

本文详细介绍了MSDNet(Multi-Scale Decoder Network)如何利用Transformer架构实现小样本语义分割。通过多尺度解码器和空间Transformer解码器,MSDNet能够在仅有1-5张标注图像的情况下完成精确分割任务。文章提供了PyTorch代码实例和优化技巧,帮助开发者快速掌握这一前沿技术。

weixin_30832143的博客 506

Delphi7中TEmbeddedWB控件弹出Javascript错误提示框问题

TEmbeddedWB控件是Delphi中常用的liu

lwsas1的专栏 1870

树莓派4B安装 ubuntu20.04 & VNC远程桌面 & 安装ROS noetic

树莓派4B安装ubuntu20.04 & VNC远程桌面1、安装ubuntu方式1:下载Imager文件。方式2:下载镜像文件。2、查询树莓派 IP 地址3、使用ssh远程登录树莓派4、更新源地址5、更新6、安装桌面环境7、允许root登陆8、登陆远程桌面9、设置中文 1、安装ubuntu 方式1:下载Imager文件。...

weixin_44415639的博客 2万+

《python算法与数据结构2000讲》算法与数据结构总结

《python算法与数据结构2000讲》算法与数据结构总结

IT 甄选推荐 1104

CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理

当WebBrowser控件(CDHtmlDialog自动创建了WebBrowser控件)加载的网页中含有错误Javascript代码时默认情况下控件会弹出错误信息提示对话框,相对于用户体验来说这样的提示完全不是开发人员想要的,针对这个问题有两个解决方案,一是完全屏蔽掉错误提示,二是控制错误的提示并且记录错误信息同时也可以控制出现错误后Javascript是否继续执行。 1、屏蔽...

aaa407217484的博客 189

SAP BOM (物料清单) 详解

BOM(Bill of Materials,物料清单)是制造业和生产管理中的一个核心概念。它列出了生产某种产品所需的所有原材料、零部件和子组件的详细信息。在SAP系统中,BOM管理是为了帮助企业在生产过程中更高效地管理物料需求、库存以及生产成本。BOM不仅包括物料的数量和单位,还详细描述了每个物料的规格、标准和在产品中的位置。

我小时候很黑的博客 4256

New WPF WebBrowser - How do I suppress script errors?

private void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) { HideScriptErrors(webBrowser1, true); } //屏闭JS错误 pub...

weixin_30339457的博客 145

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C#不让webBrowser弹出js的脚本错误信息

在使用webBrowser控件时,访问网页会弹出JS脚本错误提示如下: 解决方法: 在webBrowser的DocumentCompleted事件中加上以下代码: //屏蔽网页JS脚本错误弹窗 webBrowser1.ScriptErrorsSuppressed = true;

美奇软件开发工作室 1398

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法

当WebBrowser控件(CDHtmlDialog自动创建了WebBrowser控件)加载的网页中含有错误Javascript代码时默认情况下控件会弹出错误信息提示对话框,相对于用户体验来说这样的提示完全不是开发人员想要的,针对这个问题有两个解决方案,一是完全屏蔽掉错误提示,二是控制错误的提示并且记录错误信息同时也可以控制出现错误后Javascript是否继续执行。 1、屏蔽错误信息提示

donglinshengan的专栏 1380

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

webbrowser屏蔽网页弹出框和脚本错误提示框

 1、引用组件using mshtml; 2、添加事件 webBrowser.Navigated += WebBrowser_Navigated; 3、代码         /// &lt;summary&gt;         /// 屏蔽alert         /// &lt;/summary&gt;         /// &lt;param name="sender"&gt;&...

1832

关于屏蔽CHtmlView脚本错误

当WebBrowser控件(CDHtmlDialog自动创建了WebBrowser控件)加载的网页中含有错误Javascript代码时默认情况下控件会弹出错误信息提示对话框,相对于用户体验来说这样的提示完全不是开发人员想要的,针对这个问题有两个解决方案,一是完全屏蔽掉错误提示,二是控制错误的提示并且记录错误信息同时也可以控制出现错误后Javascript是否继续执行。 1、屏蔽错误信息提示

lin_angle的专栏 3857

C# 禁止 Webbrowser 控件的弹出脚本错误对话框

来自:http://blog.youkuaiyun.com/davidhsing/article/details/5321700 当IE浏览器遇到脚本错误时浏览器,左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。当我们使用 WebBrowser控件时有错误信息框弹出,这样程序显的很不友好,而且会让一些自动执行的程序暂停。我看到有人采取的解决方案是做一个窗体杀手程序来关闭弹

码农 990

WebBrowser使用总结

网页源码webBrowser控制页面元素

路在何方 7019

关于WebBrowser的一些问题

最近再用WebBrowser 做自动登录等功能收集一些WebBrowser 的用法和实例,持续更新中,欢迎提意见,共同学习。一、js错误弹出屏蔽问题webBrowser.ScriptErrorsSuppressed=true ; 将此属性设置为   true   以调试显示在   WebBrowser   控件中的网页。如果要使用该控件向应用程序添加基于   Web   的控件和脚本代

lsgy2008的专栏 627
上一篇: OleView 相关
下一篇: Qt 中的中英文混排
SmartGeek
博客等级 码龄14年 1粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值