http://www.cnblogs.com/carekee/articles/5332797.html

在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全

在EOS6的项目中,如果采用VC++开发的ActiveX,那么第一次运行的时候,IE中就会提示,“在此页上的ActiveX控件和本 页上的其他部分的交互可能不安全,你想允许这种交互吗?”在网上找了很多资料,原理介绍的多,但是真正如何做,介绍的比较少,因此这里把实际的步骤一步一 步的记录下来了,供大家参考。
1.1 去除ActiveX访问时的安全提示
当ActiveX第一次被访问时,会出现如下提示框:

这是IE浏览器的安全机制造成的,我们可以采用下面的步骤来去除这个提示信息:
1.1.1 在CDemoCtl的头文件.h中增加对objsave的引用
#include <objsafe.h>
1.1.2 在其protected声明区增加如下内容:
//去掉安全警告 BEGIN
DECLARE_INTERFACE_MAP()
BEGIN_INTERFACE_PART(ObjectSafety, IObjectSafety)
STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions);
STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions);
END_INTERFACE_PART(ObjectSafety)
//去掉安全警告 END
1.1.3 在CDemoCtl的实现类.cpp的IMPLEMENT_DYNCREATE(CActivexFirstCtrl, COleControl)这一行后增加如下内容:
//去掉安全警告 BEGIN
BEGIN_INTERFACE_MAP(CHJFaceActiveCtrl, COleControl)
    INTERFACE_PART(CHJFaceActiveCtrl, IID_IObjectSafety, ObjectSafety)
END_INTERFACE_MAP()

// Implementation of IObjectSafety
STDMETHODIMP CHJFaceActiveCtrl::XObjectSafety::GetInterfaceSafetyOptions(
REFIID riid,
DWORD __RPC_FAR *pdwSupportedOptions,
DWORD __RPC_FAR *pdwEnabledOptions)
{
    METHOD_PROLOGUE_EX(CHJFaceActiveCtrl, ObjectSafety)
    if (!pdwSupportedOptions || !pdwEnabledOptions)
    {
        return E_POINTER;
    }
    *pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
    *pdwEnabledOptions = 0;
    if (NULL == pThis->GetInterface(&riid))
    {
        TRACE("Requested interface is not supported.\n");
        return E_NOINTERFACE;
    }
    // What interface is being checked out anyhow?
    OLECHAR szGUID[39];
    int i = StringFromGUID2(riid, szGUID, 39);
    if (riid == IID_IDispatch)
    {
        // Client wants to know if object is safe for scripting
        *pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
        return S_OK;
    }
    else if (riid == IID_IPersistPropertyBag
    || riid == IID_IPersistStreamInit
    || riid == IID_IPersistStorage
    || riid == IID_IPersistMemory)
    {
        // Those are the persistence interfaces COleControl derived controls support
        // as indicated in AFXCTL.H
        // Client wants to know if object is safe for initializing from persistent data
        *pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
        return S_OK;
    }
    else
    {
        // Find out what interface this is, and decide what options to enable
        TRACE("We didn't account for the safety of this interface, and it's one we support...\n");
        return E_NOINTERFACE;
    }
}

STDMETHODIMP CHJFaceActiveCtrl::XObjectSafety::SetInterfaceSafetyOptions(
REFIID riid,
DWORD dwOptionSetMask,
DWORD dwEnabledOptions)
{
    METHOD_PROLOGUE_EX(CHJFaceActiveCtrl, ObjectSafety)
    OLECHAR szGUID[39];
    // What is this interface anyway?
    // We can do a quick lookup in the registry under HKEY_CLASSES_ROOT\Interface
    int i = StringFromGUID2(riid, szGUID, 39);
    if (0 == dwOptionSetMask && 0 == dwEnabledOptions)
    {
        // the control certainly supports NO requests through the specified interface
        // so it"s safe to return S_OK even if the interface isn"t supported.
        return S_OK;
    }
    // Do we support the specified interface?
    if (NULL == pThis->GetInterface(&riid))
    {
        TRACE1("%s is not support.\n", szGUID);
        return E_FAIL;
    }
    if (riid == IID_IDispatch)
    {
        TRACE("Client asking if it's safe to call through IDispatch.\n");
        TRACE("In other words, is the control safe for scripting?\n");
        if (INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwOptionSetMask && INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwEnabledOptions)
        {
            return S_OK;
        }
        else
        {
            return E_FAIL;
        }
    }
    else if (riid == IID_IPersistPropertyBag
    || riid == IID_IPersistStreamInit
    || riid == IID_IPersistStorage
    || riid == IID_IPersistMemory)
    {
        TRACE("Client asking if it's safe to call through IPersist*.\n");
        TRACE("In other words, is the control safe for initializing from persistent data?\n");
        if (INTERFACESAFE_FOR_UNTRUSTED_DATA == dwOptionSetMask && INTERFACESAFE_FOR_UNTRUSTED_DATA == dwEnabledOptions)
        {
            return NOERROR;
        }
        else
        {
            return E_FAIL;
        }
    }
    else
    {
        TRACE1("We didn't account for the safety of %s, and it's one we support...\n", szGUID);
        return E_FAIL;
    }
}
STDMETHODIMP_(ULONG) CHJFaceActiveCtrl::XObjectSafety::AddRef()
{
    METHOD_PROLOGUE_EX_(CHJFaceActiveCtrl, ObjectSafety)
    return (ULONG)pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) CHJFaceActiveCtrl::XObjectSafety::Release()
{
    METHOD_PROLOGUE_EX_(CHJFaceActiveCtrl, ObjectSafety)
    return (ULONG)pThis->ExternalRelease();
}
STDMETHODIMP CHJFaceActiveCtrl::XObjectSafety::QueryInterface(REFIID iid, LPVOID* ppvObj)
{
    METHOD_PROLOGUE_EX_(CHJFaceActiveCtrl, ObjectSafety)
    return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
//去掉安全警告 END

在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全相关推荐

  1. 当前安全设置禁止运行该页中activeX控件,该页无法正常显示

    运行services查看服务时,当前安全设置禁止运行该页中activeX控件,该页无法正常显示:打开一个project文件时,也显示 当前安全设置禁止运行该页中activeX控件,该页无法正常显示. ...

  2. java多文件上传plupload控件实现多图片上传(二)

    接上篇 java多文件上传plupload控件实现多图片上传(一) 续写PluploadUtil 和 Plupload PO类,以及后台的action. 至此,可实现多文件上传功能. 上传文件Acti ...

  3. java 批量上传图片插件_java多文件上传plupload控件实现多图片上传(一)

    使用的是plupload-2.1.2 控件.网上资源挺多的,很好下载. plupload 官方地址 : http://www.plupload.com/ plupload 示例: http://www ...

  4. 开发Activex控件安全

    2019独角兽企业重金招聘Python工程师标准>>> 2.浏览该网页后,发现页面提示"在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全.你想允许这种交互 ...

  5. ArcToolBox 提示ActiveX控件问题解决办法

    ArcToolBox 工具提示ActiveX控件问题 本章导读:这个章节是关于 ArcMap 工具的一个无关痛痒的 Bug 进行处理.如果你的操作系统是Win10 ,并且 ArcGIS 是版本是10. ...

  6. Win32页上的所有控件属性与方法

    Win32页上的所有控件.该页控件是在32位Win系统中的一些基本控件,如果你选择开发CLX程序,则在控件面板上不会显示该页 TTabControl 属性 DisplayRect:只定该控件客户区的一 ...

  7. VC使用ActiveX控件常见问题

    转自:http://lingchuangsong.blog.163.com/blog/static/126932322008631104133309/ 一方面,它表示将你联系到Microsoft.In ...

  8. [转]C#开发ActiveX控件,.NET开发OCX控件案例

    引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...

  9. 使用C#开发ActiveX控件[Obsolete]

    附件下载(源代码+安装文件+教程) 0. 前言 ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中.使用ActiveX插件,可以轻松方 ...

最新文章

  1. 什么是pretext tasks?
  2. 机器学习入门学习笔记:(2.4)线性判别分析理论推导
  3. 清除被占用的8080端口,否则npm run dev无法正常运行
  4. 2/2 常用函数:标准库函数
  5. 她小时候被指没数学天分,后来竟成为首位获数学大奖的女人;她的生命很短暂却惊艳了全世界...
  6. mysql 数据增量备份_MySQL数据库之mysql全量备份、增量备份实现方法
  7. web小知识与问题串烧(html,css,js)
  8. 百度旗下网站暗藏恶意代码——劫持用户电脑疯狂“收割”流量
  9. 当我们在谈论HTTP队头阻塞时,我们在谈论什么?
  10. 计算机二级front和rear什么意思,关于计算机二级考试内容
  11. 单字双字三字_古人取名有什么讲究?为什么有时候单字多有时候双字多?
  12. TextView显示省略号问题
  13. [APIO2018] New Home 新家
  14. 海康威视设备SDK调用,是否支持IP通道的思考
  15. 360N5S:360N5S刷机
  16. web压力测试-Web Bench
  17. IDEA 2020/7/28更新特性速览 - 对于各框架的支持,版本控制工具,docker,构建工具等的支持
  18. 日本机载激光雷达测深进展(二)机载激光雷达测深经验
  19. 云客网解析网站内容采集的注意要点
  20. 【专栏独家】详解微信朋友圈广告:会不会成为腾讯的新印钞机?

热门文章

  1. 小程序有三大痛点,何解?
  2. 手机锁屏弹出通知 php,Notification通知在OPPO手机上不弹出提示?
  3. 2021最新版JAVA开发面试那些事儿~(结尾有字节、华为面试内容)
  4. prod()与cumprod()区别cumsum()
  5. 【计算机组成原理】中央处理器(一)—— CPU 的功能与基本结构
  6. 计算机应用基础I单选题,I12秋计算机应用基础14作业及答案.doc
  7. Vue面试题重难点总结
  8. springboot+vue+elementui课堂在线答疑网站系统java+python
  9. 为什么快手消息显示服务器萌,快手萌面Kmoji上线 一键生成个人专属AR形象
  10. (7) 浅学 “爬虫” 过程 (概念+练习)