`
yangzb
  • 浏览: 3472032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全。你想允许这种交互

 
阅读更多

如果采用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(CDemoCtl, COleControl)
INTERFACE_PART(CDemoCtl, IID_IObjectSafety, ObjectSafety)
END_INTERFACE_MAP()
// Implementation of IObjectSafety
STDMETHODIMP CDemoCtl::XObjectSafety::GetInterfaceSafetyOptions(
REFIID riid,
DWORD __RPC_FAR *pdwSupportedOptions,
DWORD __RPC_FAR *pdwEnabledOptions)
{
METHOD_PROLOGUE_EX(CDemoCtl, 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 CDemoCtl::XObjectSafety::SetInterfaceSafetyOptions(
REFIID riid,
DWORD dwOptionSetMask,
DWORD dwEnabledOptions)
{
METHOD_PROLOGUE_EX(CDemoCtl, 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) CDemoCtl::XObjectSafety::AddRef()
{
METHOD_PROLOGUE_EX_(CDemoCtl, ObjectSafety)
return (ULONG)pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) CDemoCtl::XObjectSafety::Release()
{
METHOD_PROLOGUE_EX_(CDemoCtl, ObjectSafety)
return (ULONG)pThis->ExternalRelease();
}
STDMETHODIMP CDemoCtl::XObjectSafety::QueryInterface(
REFIID iid, LPVOID* ppvObj)
{
METHOD_PROLOGUE_EX_(CDemoCtl, ObjectSafety)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
//去掉安全警告 END

 

分享到:
评论

相关推荐

    在此页面上的activex控件和本页上的其他控件的交互可能不安全

    在此页面上的activex控件和本页上的其他控件的交互可能不安全

    在此页面上的Activex控件和本页上的其他部分及交互可能不安全解决办法

    在此页面上的Activex控件和本页上的其他部分及交互可能不安全解决办法,步骤清晰,按步骤操作即可。

    ActiveX组件与JavaScript交互

    ActiveX组件与JavaScript交互ActiveX组件与JavaScript交互ActiveX组件与JavaScript交互

    c# 编写activex控件 并与网页交互

    c# 编写activex控件 并与网页交互,传递数据给网页,调用网页方法 例子 c# 编写activex控件 并与网页交互,传递数据给网页,调用网页方法 例子

    Firefox中支持ActiveX控件运行的研究报告

    要实现Firefox对ActiveX控件的支持,必须解决四个问题,包括如何创建和初始 化控件对象,如何在Firefox浏览器中显示和现场激活控件,如何使JavaScript能访问控 件的属性和方法以及如何捕获控件事件并将其转发给...

    Activex控件签名工具包

    Activex控件签名工具, 微软提供了两套签名工具, 1)signcode.exe, 从1998年开始使用,随.NET Framework SDK发布。 signcode.exe 数字签名工具 makecert.exe 创建数字证书 cert2spc.exe 将数字证书转化为软件...

    用C#编写ActiveX控件(二)

     在我的上一篇blog中,已经实现了一个最基本的ActiveX控件。当然,我们编写的任务还没有完成。首先,我们先尝试实现和JS的交互能力。    我们在Demo中加入ShowMessage方法: public void ShowMessage(string...

    Office ActiveX 控件

    Office ActiveX 控件让你轻松显示和编辑 Office 文档,只需要简单拖曳 Office ActiveX 到你的窗体,就立即使你的程序拥有 Office 功能。利用它你可以与 Word,Excel,PowerPoint,Visio,Project 等 Office 应用程序...

    activex控件

    自己写的activex控件总是提示"在此页上的activex控件和本页上其他部分的交互可能不安全,你想允许这种交互吗?" . 比较烦人,而且提示完之后ie就死了. 在网上搜了好久终于找到了解决办法,就是网上说的比较多的那种...

    使用VS2008C#开发ActiveX控件

    ActiveX 控件以前也叫做 OLE 控件或 OCX 控件,它是一些软件组件或对象,可以将其 插入到 WEB 网页或其它应用程序中。使用 ActiveX 插件,可以轻松方便的在 Web 页中插 入多媒体效果、交互式对象以及复杂程序等等。 ...

    AddFlow ActiveX控件

    AddFlow ActiveX控件 是一种能让你快速生成流程图的应用软件的控件。图标的每一个特征对象都是有用的,如独特的颜色、字体、形状、格式、图画、文本等等。当移动时节点是持续连接的。 或者是交互式地 或者是标题...

    AmTapi ActiveX控件(Pro Edition)

    AmTapi ActiveX控件 是一个兼容TAPI的电话控件,TAPI是电话学API(Telephony API),由Intel和Microsoft共同开发,是32位Windows版本标准。TAPI能在一个广泛的电话硬件平台上实现彼此之间的电话设备共享,提供...

    Vector Graphics ActiveX控件

    &lt;br&gt; Vector Graphics ActiveX控件主要特色: 简单易用 免费非经营使用 用硬件加速来加速最高可视化速度 可以在图像对象和存储在任何地方的外部数据建立连接 支持高速和高质量rendering光栅 可以导出.BMP, .JPG,...

    NCTDialogicVoice ActiveX控件

    &lt;br&gt; 用NCTDialogicVoice ActiveX控件,你可以创建各种软件包括: 交互式语音响应 语音邮件 Outbound Calling 还有其它... NCTDialogicVoice ActiveX控件主要特色 支持模拟和数字Dialogic语音板 支持Microsoft ...

    ActiveX控件与服务器端对象级交互的探讨和应用.pdf

    ActiveX控件与服务器端对象级交互的探讨和应用.pdf

    C#开发ActiveX控件 源码

    ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。使用ActiveX插件,可以轻松方便的在 Web页中插入多媒体效果、交互式对象以及复杂程序等等。 通常使用...

    ActiveX控件与Javascript之间的交互示例

    主要介绍了ActiveX控件如何与Javascript进行交互,需要的朋友可以参考下

    使用VS2008 C#开发ActiveX控件【源码】

    ActiveX 控件以前也叫做 OLE 控件或 OCX 控件,它是一些软件组件或对象,可以将其 插入到 WEB 网页或其它应用程序中。使用 ActiveX 插件,可以轻松方便的在 Web 页中插 入多媒体效果、交互式对象以及复杂程序等等...

    精彩编程与编程技巧-如何在网页上使用 vb6 制作的 ActiveX 控件?...

    如何在网页上使用 vb6 制作的 ActiveX 控件?

Global site tag (gtag.js) - Google Analytics