WebBrowser中禁用脚本错误对话框
来源:互联网 发布:anaconda ubuntu 16.04 编辑:程序博客网 时间:2024/05/18 15:55
#include <mshtmhst.h>#include <exdisp.h>#include <atlcomcli.h>#include <mshtml.h>class CDisableScriptErrHelper : 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 ) { CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spHTML( spDisp ); if ( spHTML ) { 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; } } 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 ) { ( *pvaOut ).vt = VT_BOOL; ( *pvaOut ).boolVal = VARIANT_TRUE; return S_OK; } return m_spDefaultOleCommandTarget->Exec( pguidCmdGroup, nCmdID, nCmdExecOpt, pvaIn, pvaOut ); } private: CComQIPtr<IDocHostUIHandler, &IID_IDocHostUIHandler> m_spDefaultDocHostUIHandler; CComQIPtr<IOleCommandTarget, &IID_IOleCommandTarget> m_spDefaultOleCommandTarget; LONG m_cRef;};
在OnDocumentComplete 和OnBeforeNavigate事件中加入SetHandle即可
- WebBrowser中禁用脚本错误对话框
- Webbrowser控件中屏蔽弹出脚本错误对话框
- Webbrowser控件中屏蔽弹出脚本错误对话框
- WebBrowser控件中屏蔽弹出脚本错误对话框
- C# WebBrowser 禁用脚本错误提示
- 禁止Webbrowser控件的弹出脚本错误对话框
- C# 禁止 Webbrowser 控件的弹出脚本错误对话框
- vb2008 webbrowser 如何禁止 脚本错误提示 及弹出对话框
- C++BUILDER2010下屏蔽webbrowser脚本错误对话框
- C# 禁止 Webbrowser 控件的弹出脚本错误对话框
- WebBrowser或CHtmlView中屏蔽脚本错误
- WebBrowser或CHtmlView中屏蔽脚本错误
- C# WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- WebBrowser控件禁用超链转向、脚本错误提示、默认右键菜单等
- WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- C# WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- C# WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- 【PAT】1050 String Substraction
- Lua与C/C++的交互
- ios6下的程序内购买IAP http://www.raywenderlich.com/zh-hans/25155/ios-6-iap入门
- shell编程--彩色打印
- Lua做为c++程序的配置文件
- WebBrowser中禁用脚本错误对话框
- c/c++解析lua配置文件
- MDM软件之SAP Afaria试用印象
- JOS学习笔记(十二)
- Super Jumping! Jumping! Jumping!
- something
- 可在广域网部署运行的QQ高仿版 -- GG叽叽(源码)
- java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory的解决办法
- jsp页面实时显示当前系统时间方法