zoukankan      html  css  js  c++  java
  • Using ActiveX in IE

    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




  • 相关阅读:
    前端React 条件渲染
    hbuilder小白干货之快捷键大全
    前端React 元素渲染
    mybatis学习笔记五(映射)
    mybatis学习笔记四(配置文件)
    mybatis学习笔记二(sqlsession与开发dao)
    mybatis学习笔记三(动态sql)
    mybatis学习笔记一(mybatis概述)
    必备idea 插件plugins 提高编码效率
    shell提升篇
  • 原文地址:https://www.cnblogs.com/yefengmeander/p/2887563.html
Copyright © 2011-2022 走看看