程序中内嵌网页弹出出现了"停止运行此脚本么?" 如果选择否, 程序就挂掉了, 再没有响应.
同事找到一个资料 : http://blog.csdn.net/breaksoftware/article/details/7104632
主要是修改2个函数, 原始资料是MFC的. 换到DuiLib中也行.
3rd\DuiLib\Control\UIWebBrowser.h
#ifndef __UIWEBBROWSER_H__
#define __UIWEBBROWSER_H__
#pragma once
#include "Utils/WebBrowserEventHandler.h"
#include <ExDisp.h>
namespace DuiLib
{
class UILIB_API CWebBrowserUI
: public CActiveXUI
, public IDocHostUIHandler
, public IServiceProvider
, public IOleCommandTarget
, public IDispatch
, public ITranslateAccelerator
{
public:
/// 构造函数
CWebBrowserUI();
virtual ~CWebBrowserUI();
// ...
// IServiceProvider
STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void** ppvObject);
STDMETHOD (ProcessUrlAction)(
/* [in] */ LPCWSTR pwszUrl,
/* [in] */ DWORD dwAction,
/* [size_is][out] */ BYTE *pPolicy,
/* [in] */ DWORD cbPolicy,
/* [in] */ BYTE *pContext,
/* [in] */ DWORD cbContext,
/* [in] */ DWORD dwFlags,
/* [in] */ DWORD dwReserved);
// ...
<pre name="code" class="cpp"> };
} // namespace DuiLib
#endif // __UIWEBBROWSER_H__
// 3rd\DuiLib\Control\UIWebBrowser.cpp
STDMETHODIMP DuiLib::CWebBrowserUI::ProcessUrlAction(
/* [in] */ LPCWSTR pwszUrl,
/* [in] */ DWORD dwAction,
/* [size_is][out] */ BYTE *pPolicy,
/* [in] */ DWORD cbPolicy,
/* [in] */ BYTE *pContext,
/* [in] */ DWORD cbContext,
/* [in] */ DWORD dwFlags,
/* [in] */ DWORD dwReserved)
{
// 脚本禁用的关键
DWORD dwPolicy = URLPOLICY_ALLOW;
// !! If the compiler can't find URLACTION_CROSS_DOMAIN_DATA, make sure you are building with
// !! the latest version of the IE headers -- URLMON.H specifically -- from MSDN Downloads for the
// !! Web Workshop or the Platform SDK
if ((dwAction >= URLACTION_SCRIPT_MIN)
&& (dwAction <= URLACTION_SCRIPT_MAX))
{
dwPolicy = URLPOLICY_ALLOW;
}
else
return INET_E_DEFAULT_ACTION;
if ( cbPolicy >= sizeof (DWORD))
{
*(DWORD*) pPolicy = dwPolicy;
return S_OK;
}
else
{
return S_FALSE;
}
}
STDMETHODIMP DuiLib::CWebBrowserUI::QueryService( REFGUID guidService, REFIID riid, void** ppvObject )
{
HRESULT hr = E_NOINTERFACE;
*ppvObject = NULL;
if ( guidService == SID_SDownloadManager && riid == IID_IDownloadManager)
{
*ppvObject = this;
return S_OK;
}
return hr;
}
因为弹出""停止运行此脚本么?"不是很频繁, 所以暂时还没有看到修改内嵌网页安全选项后的效果 ~