Angelo Lee's Blog
This is my kingdom .If i don't fight for it ,who will ?

Method 1:

1.Import the ActiveX Control in html.

<object classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57" id="activeXObject"  width="100%" height="100%"> 
     <param name="BorderStyle" value="1"> 
	 <param name="TitlebarColor" value="52479"> 
	 <param name="TitlebarTextColor" value="0"> 
	 <param name="Menubar" value="1"> 
</object> 

Class Id is a unique identity of ActiveX. 

2.JavaScript jude if the ActiveX Control is existing.


<script> 
	if(activeXObject.object == null) { 
	alert("Please install the control first!") 
</script>


Method 2:

3.Create ActiveX object using new ActiveXObject in javascript.

var activexObj = new ActiveXObject("ArchiveManage.ArchiveManageCtrl.1");

The argument of ActiveXObject is progId, not classId.

<script language="JavaScript" type="text/javascript">
  try {
    var plugIn=new ActiveXObject("ArchiveManage.ArchiveManageCtrl.1");
    document.write("The control has existing.");
  }
  catch (e) {
    document.write("Please install the control first!");
  }
</script>


3.Resove ActiveX security warning.

Step1:Replace html header.

<!-- saved from url=(0014)http://www.96002.cn/ -->
<html xmlns="http://www.w3.org/1999/xhtml">

Step2:Include <objsafe.h> in control implement.

#include <objsafe.h>  

Step3:Add declared in ActiveX Control header file.

//去掉安全警告 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

Step4:Add following code in implement file.

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




posted on 2012-11-23 23:31  Angelo Lee  阅读(244)  评论(0编辑  收藏  举报