DuiLib : 修改内嵌网页的安全选项

程序中内嵌网页弹出出现了"停止运行此脚本么?" 如果选择否,  程序就挂掉了, 再没有响应.

同事找到一个资料 : 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;
}

因为弹出""停止运行此脚本么?"不是很频繁, 所以暂时还没有看到修改内嵌网页安全选项后的效果 ~


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值