WebBrowser控件:阻止加载特定的ActiveX控件

时间:2019-04-06 19:45:50

标签: webbrowser-control mshtml iwebbrowser2 axwebbrowser

我正在托管WebBrowser控件(使用ATL),并且正在寻找一种阻止加载特定ActiveX控件(通过CLSID)的方法。

我知道ProcessUrlAction可以阻止ActiveX控件,但这是针对整个URL的,它似乎不允许您通过CLSID阻止特定的ActiveX控件。

我看不到任何特定的事件接口在MSHTML或WebBrowser控件中得到通知。

现在,我唯一想到的解决方案是挂接CoCreateInstanceEx并尝试将其阻止在那里。

还有更简单的想法吗?

1 个答案:

答案 0 :(得分:0)

ProcessUrlAction也可以阻止单个控件,您需要检查dwAction = URLACTION_ACTIVEX_RUN,如果是,则pContext将具有将要运行的控件的CLSID。如果要阻止,则将pPolicy设置为URLPOLICY_DISALLOW并返回S_FALSE:

static CLSID CLSID_BAD = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
STDMETHOD(ProcessUrlAction)(LPCWSTR pwszUrl, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
{
    if(URLACTION_ACTIVEX_RUN == dwAction && CLSID_BAD == *(CLSID *)pContext)
    {
        *pPolicy = URLPOLICY_DISALLOW;
        return S_FALSE;
    }
    return INET_E_DEFAULT_ACTION;
}