为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 浏览器插件之ActiveX开发

浏览器插件之ActiveX开发

2018-03-01 39页 doc 490KB 92阅读

用户头像

is_601191

暂无简介

举报
浏览器插件之ActiveX开发浏览器插件之ActiveX开发 浏浏器件之插 ActiveX 浏浏;一, 一般的Web浏用浏于浏浏器件能不使用的建浏量不使用~因浏其涉及到安全浏浏以及影用浏插尽响 安;或自浏下浏注安,浏浏浏。在有特殊需求;如涉及据安全的金融浏浏据交互、需件装册装体数数插 才能浏浏的本地浏浏的交互等,的情下可以酌情用。与况慎 浏浏器件浏可以分浏大浏浏~插体划两即IE支持的件以及非插IE支持的件。本在插来 Netscape浏代~浏于浏浏器件是有公用的浏范的插(NPAPI)~一浏始所有浏浏器都支持浏浏范~包括IE。后出于商浏原因~微浏的来IE不...
浏览器插件之ActiveX开发
浏览器插件之ActiveX开发 浏浏器件之插 ActiveX 浏浏;一, 一般的Web浏用浏于浏浏器件能不使用的建浏量不使用~因浏其涉及到安全浏浏以及影用浏插尽响 安;或自浏下浏注安,浏浏浏。在有特殊需求;如涉及据安全的金融浏浏据交互、需件装册装体数数插 才能浏浏的本地浏浏的交互等,的情下可以酌情用。与况慎 浏浏器件浏可以分浏大浏浏~插体划两即IE支持的件以及非插IE支持的件。本在插来 Netscape浏代~浏于浏浏器件是有公用的浏范的插(NPAPI)~一浏始所有浏浏器都支持浏浏范~包括IE。后出于商浏原因~微浏的来IE不再支持NPAPI~改而自己浏浏了一套基于COM的ActiveX体个体系~但浏系浏于非IE浏浏器是拒浏支持的。所以目前的基本是~状况IE浏浏器浏支持ActiveX控件~而Firefox、Chrome等浏浏器只支持一浏接口;另XPCOM或NPAPI,。要想浏浏一个Web插件~至少需要同浏考浏IE支持的AceiveX版以及非IE支持的Plugin版;Flash等件浏插于IE与非IE浏浏器都是不同的,。 ActiveX的浏浏可以用C#、VB及C++等浏言。用C++浏浏ActiveX既可以使用ATL~也可以使用MFC。ATL ActiveX浏出文件浏小~适合浏浏浏~但浏浏浏浏度稍大~而网MFC ActiveX浏出文件稍大;附浏必要的MFC dll,~但易于上手。本文主要介浏基于MFC的ActiveX浏浏。一、浏建浏目及添加接口 在Vs.net 2008中~新建一个MFC ActiveX Control浏目, 点浏“OK”后浏出如下浏浏,将框 依次点浏“Next”按浏直到“Control Settings”浏浏浏: 由于本例子只演示浏提供函接口不基于界面的数ActiveX~故“Create control based on”浏浏“;none,”可。点浏即"Finish”按浏~完成了浏目的浏建~文件浏如下,即构 右浏浏目名~浏浏“称Properties”~在浏目性浏浏中浏“属框All Configurations”浏行配置。在“Configurations Properties->General”浏浏浏中~“Use of MFC”浏浏“Use MFC in a static Library”~以便浏浏浏将MFC相浏浏自浏和控件一起打包。浏于“Character Set”的浏浏根据具情体况而定~浏注意“Unicode Character Set”和“Mulity-Byte Character SEt”浏字符浏理是完全不一浏的;字符浏浏不一浏~需要浏行MultiByteToWideChar或WideCharToMultiByte浏浏,。注意,浏建MFC ActiveX Control浏已浏自浏浏浏目添加了.def文件做好了相浏浏浏。若浏配置信息更改后浏并 致浏浏的ocx注不成功或提示不到册找EntryPoint~可以浏浏一下Linker->Input的Module Definition File是否配置正~正常情下已浏自浏配置好了~如下浏,确况 接下就可以在来ActiveX中添加我浏需要外部交互的接口方法和性了。浏浏“与属Class View”~右浏“MyTestActiveXLib->_DMyTestActiveX”~在浏出的菜浏中可以浏浏Add Function或Add Property来属添加接口方法或接口性, 浏里以定浏一个LONG AddFun(LONG num1,LONG num2) 的接口函浏例~添加数 Menthod如下浏所示, 点浏Finish后~可在“即MyTestActiveXCtrl.cpp”文件到浏添加的接口函代浏,找数 在函中完成自定浏的浏浏浏浏可。数体即 二、浏浏安全接口 上述浏目浏浏后可生成即ocx文件~浏ocx即可嵌入html在IE中行。但如果浏运ocx浏浏浏面是放在浏的真web服浏器上~浏浏浏浏面浏行ActiveX里浏浏接口浏IE将会属提示“无相浏性,需要浏置其初始化和脚本行的安全性”等信息。浏是因浏运ActiveX要在浏程IE上浏行~需要浏浏安全接口。有浏控件的初始化和脚本安全浏浏~《 再浏 IObjectSafety》一文及其引用的Microsoft文章做了浏浏致描述。 浏于ATL写的ActiveX~浏浏IObjectSafety即可~浏里有ATL浏浏安全接口的浏浏的描述。 浏于MFC写的ActiveX~可以通浏修改注的方式浏浏控件的安全性~微浏也提供的册来浏浏 的文描述档。具浏浏步浏如下,体 1、首先在浏目中添加Cathelp.h和Cathelp.cpp两个内文件~其容如下所示。 Cathelp.h #include "comcat.h" // Helper function to create a component category and associated// description HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription); // Helper function to register a CLSID as belonging to a component// category HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid);// HRESULT UnRegisterCLSIDInCategory - Remove entries from the registry HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid); Cathelp.cpp #include "stdafx.h" #include "comcat.h" #include "strsafe.h" #include "objsafe.h" // HRESULT CreateComponentCategory - Used to register ActiveX control as safe HRESULT CreateComponentCategory(CATID catid, WCHAR *catDescription) { ICatRegister *pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (FAILED(hr)) return hr; // Make sure the HKCR\Component Categories\{..catid...} // key is registered. CATEGORYINFO catinfo; catinfo.catid = catid; catinfo.lcid = 0x0409 ; // english size_t len; // Make sure the provided description is not too long. // Only copy the first 127 characters if it is. // The second parameter of StringCchLength is the maximum // number of characters that may be read into catDescription. // There must be room for a NULL-terminator. The third parameter // contains the number of characters excluding the NULL-terminator. hr = StringCchLength(catDescription, STRSAFE_MAX_CCH, &len); if (SUCCEEDED(hr)) { if (len>127) { len = 127; } } else { // TODO: Write an error handler; } // The second parameter of StringCchCopy is 128 because you need // room for a NULL-terminator. hr = StringCchCopy(catinfo.szDescription, len + 1, catDescription); // Make sure the description is null terminated. catinfo.szDescription[len + 1] = '\0'; hr = pcr->RegisterCategories(1, &catinfo); pcr->Release(); return hr; } // HRESULT RegisterCLSIDInCategory - // Register your component categories information HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid){ // Register your component categories information. ICatRegister *pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (SUCCEEDED(hr)) { // Register this category as being "implemented" by the class. CATID rgcatid[1] ; rgcatid[0] = catid; hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid); } if (pcr != NULL) pcr->Release(); return hr; } // HRESULT UnRegisterCLSIDInCategory - Remove entries from the registry HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid){ ICatRegister *pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (SUCCEEDED(hr)) { // Unregister this category as being "implemented" by the class. CATID rgcatid[1] ; rgcatid[0] = catid; hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid); } if (pcr != NULL) pcr->Release(); return hr; } 注,Cathelp.cpp中的代浏是基于Unicode Character Set的。故浏目配置浏若改成Multi-Byte Character Set~需浏Cathelp.cpp中代浏做相浏修改~否浏浏浏不浏~ 2、在MyTestActiveX.cpp文件中~添加CLSID_SafeItem的定浏, CLSID_SafeItem的浏是根据xxxCtrl.cpp;本例中是MyTestActiveXCtrl.cpp,文件中IMPLEMENT_OLECREATE_EX的定浏而的;浏浏上就是来ActiveX的CLASSID,。本例中MyTestActiveXCtrl.cpp文件中IMPLEMENT_OLECREATE_EX的的浏如下, “将0x1345c26b, 0xe979, 0x45a5, 0x99, 0x7d, 0x94, 0x27, 0xfb, 0x81, 0xe7, 0x7”浏浏的在适位置添加“当{”和“}”括弧浏成了即CLSID_SafeItem的浏 “0x1345c26b, 0xe979, 0x45a5, {0x99, 0x7d, 0x94, 0x27, 0xfb, 0x81, 0xe7, 0x7}”。 外~另MyTestActiveX.cpp文件起始浏浏需要引入如下文件方能正常浏浏,两个 3、修改MyTestActiveX.cpp中DllRegisterServer和DllUnregisterServer函数~代浏如下;照抄可,,即 // DllRegisterServer - Adds entries to the system registrySTDAPI DllRegisterServer(void) { HRESULT hr; // HResult used by Safety Functions AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid)) return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE)) return ResultFromScode(SELFREG_E_CLASS); // Mark the control as safe for initializing. hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!"); if (FAILED(hr)) return hr; hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing); if (FAILED(hr)) return hr; // Mark the control as safe for scripting. hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!"); if (FAILED(hr)) return hr; hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting); if (FAILED(hr)) return hr; return NOERROR; } // DllUnregisterServer - Removes entries from the system registry STDAPI DllUnregisterServer(void) { AFX_MANAGE_STATE(_afxModuleAddrThis); // 浏除控件初始化安全入口. HRESULT hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing); if (FAILED(hr)) return hr; // 浏除控件脚本安全入口 hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting); if (FAILED(hr)) return hr; if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor)) return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE)) return ResultFromScode(SELFREG_E_CLASS); return NOERROR; } 注, 多例子里很DllUnregisterServer的法本文的法不一致~浏果浏致浏控件浏写与写卸 (regsvr32 /u xxxx.ocx)出浏“浏用某某ocx文件的DllUnregisterServer函出浏~浏浏代浏,数0x80070002”浏浏。究其根源~是DllUnregisterServer中浏除注表的浏序出了浏浏~册 “ waxgourd0 的浏浏”中有篇文章浏此做了浏描述。尽 4、在解下点浏浏源文件;决Resources->MyTestActiveX.rc,~点浏右浏在浏出的菜浏中浏浏“View Code”~ 浏浏浏源文件信息保以下浏目的正性,并确几个确 a) BLOCK的浏浏“040904e4” b) OLESelfRegister的浏浏“\0” c) VarFileInfo中的Translation后浏浏浏“0x0409, 1252” 到目前浏止~可以浏浏浏目~浏出的ocx控件是可以正常行的了。运~~~浏浏器件之插ActiveX浏浏;二, 按照上文《浏浏器插件之ActiveX浏浏,一,》的,能一个基于步浏浏浏浏浏浏浏MFC的的浏浏浏ActiveX控件。不在操作中是会遇到一些。由于浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏COM浏程了解得很少很少,有些浏浏我也没有找到很好的解决方法。 一、ActiveX需要引用其他dll的浏浏 浏浏我的ActiveX需要浏IC卡行写,所以需要用自的接口浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏“厂商提供了mwhrf_bj.lib”、“mwhrf_bj.dll”和“mwrf32.h”等接口文件。将“mwhrf_bj.lib”和“mwrf32.h”添加到目中,浏浏浏浏ActiveX的接口方法中就可以用接口文浏浏浏浏浏件中的方法了。但是在会出浏浏浏浏浏浏“Project:error PRJ0050:未能注册出。启用浏浏浏浏浏浏浏浏“浏每个用的重定向浏”浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏,或用提升限从命令提示窗口中注册件”“或Project : error PRJ0050: Failed to register output. Please ensure you have the appropriate permissions to modify the registry”的。浏浏浏 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏上不是出在段,而是出在注册后的ocx文件。浏浏Vs.net 2008默浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏在成功后会自注册后的ocx文件。右目名称,浏浏浏浏浏浏浏浏“Properties”,在浏出框的浏浏浏浏“Configurations Properties->Linker->General”中的Register Output就可以配置后是否自注册浏浏浏浏浏浏浏浏浏ocx,如下所示:浏浏浏浏 之所以注册ocx浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏“出,是因注册找不到被用的mwhrf_bj.dll”文件。将被用的浏浏浏“mwhrf_bj.dll”文件放在ocx文件相同目下或者其他浏浏浏浏浏浏%PATH%路径下,如Windows文件或浏浏System32文件等,,注册浏浏浏浏浏浏浏ocx浏浏浏浏浏不会。在vs.net浏浏浏境中可以直接将要被用的外部浏浏浏浏浏dll文件copy到Debug或Release目下即可,也可以在浏浏浏浏浏浏浏浏浏PreBuild脚本里将外部dll文件COPY到目文件,如:浏浏浏浏浏浏浏浏浏浏 注:可参考 “;文章。 二、ActiveX的方法浏浏浏浏 在Vs.net 2008下可以浏ActiveX按如下方式行:浏浏浏浏浏 1、准好浏浏Demo.html文件并写好程序,面中需通浏浏浏浏浏浏浏浏浏浏浏浏来引用需的浏浏浏ocx控件,于如何在浏浏浏浏浏html浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏面中用控件在后文章将提及,。 2、在vs.net 2008中右目名称,浏浏浏浏浏浏浏浏“Properties”,在出框中的浏浏浏浏浏Debugging配置里配置好浏浏浏浏浏Command和CommandArgs参数: Command: 本地IE浏浏“器的路径,如C:\Program Files\Internet Explorer\IEXPLORE.EXE” Command Args: 已建好的用于浏浏浏浏浏浏浏浏浏ocx的html文件路径,如上面提及的Demo.html文件路径, 3、在程序中需的地方置断点。按浏浏浏浏浏浏浏浏浏浏浏F5运行后vs.net将自启浏浏浏IE并打的浏浏浏浏html浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏文件,在断点会中断运行入状。 三、ActiveX的接口浏浏out/ref参数及返回自定构体数据的浏浏浏浏浏浏浏浏浏 浏浏有候ActiveX的接口方法只返回一个数据并不能足我的要求。例如通浏浏浏浏浏浏浏浏浏浏浏浏浏浏ActiveX的getPersons()方法返回一堆的人信息,那必定是一个列表或数,而且浏浏浏浏浏浏浏个每Person浏包含姓名、性等各信息,个候返回就相当了。浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏 浏浏浏浏浏浏浏浏浏浏浏了起,是已通ActiveX浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏行卡号来例。一般情况下,只要插件提供以下接口即可足需求:浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏 BSTR ReadCardNo(); 浏浏在javascript中用浏浏浏ActiveX的ReadCardNo()方法即可返回一个包含卡号的字符串。 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏但是,提供个接口如何来卡程中出的异常呢, 如果卡操作一切正常,返回一个卡号字符串当然没有。浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏 但如果卡程中出如卡未正确接、卡无法等情况浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏 如果将些异常信息反用者呢,浏浏浏浏浏浏浏浏浏浏浏浏浏浏 1、首先我想到的是使用ref或out参数来解决,浏浏C++里是OUT/RETVAL之的参数浏浏浏浏修符。浏浏浏 在.idl中定接口:浏浏浏浏浏 [id(1), helpstring("方法ReadCardNo")] LONG GetSheetName([out]BSTR* cardNo); 浏浏浏浏接口原型: LONG ReadCardNo( BSTR* cardNo ); 浏浏浏浏浏的通LONG浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏型的返回来返回状,例如可以定: 0-浏卡成功 1-浏浏浏浏浏浏卡未接 2-未找到可的卡浏浏浏浏 …… 浏浏如果返回0,表示卡成功,出的卡号已通浏浏浏浏浏浏浏浏浏浏浏浏浏out浏型的参数cardNo浏浏浏浏用者。 但是,javascript等脚本言并不支持浏浏浏浏浏浏out/ref等型的参数,函数参数浏浏浏浏浏浏浏浏浏浏也无法址,所以个方案无法解决我的。浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏 2、如果ActiveX的接口能返回一个自定的构体型数据就能足我浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏的需求了。例如我定一个构体:浏浏浏浏浏浏浏浏浏 typedef struct { LONG ResultStatus, // 返回状态 0-态卡成功 1-态态态态态态 卡未接3-未找到可的卡态态态态 BSTR CardNo // 态态态态态态态态态态卡成功,保存取的卡号 } AOPResult; 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏接口如果可以按如下子来就可以解决我的了: AOPResult ReadCardNo(); 但是,在MFC ACtiveX的接口定中中不能直接使用自定的数据型的,需要用浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏VARIANT浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏型来行。下面几篇参考文章均此有所描述: a) b) c) COM-ATL d) 浏准MFC WinSock ActiveX控件例浏浏浏浏(II)高篇浏浏 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏但起来也不是那容易,于及我需求的不 迫切性,我此没有做多。如果有成型例,望教。浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏 3、既然在Web浏浏浏浏用景下ActiveX的接口一般都是供js浏浏浏浏浏浏浏浏浏浏用,那我可以返回一个json浏“型的数据即可,如{ status:0, cardNo:234234344634 }”。浏浏ActiveX接口仍然只需返回一个BSTR的参数,只是返回的意了,不是的卡号,而需要浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏ActiveX的ReadCardNo接口在内部理需要将返回封装成一个浏浏浏浏浏浏浏浏浏浏浏浏浏浏json格式的字符串返回并交由用浏浏方解析。不,在封装浏浏浏浏浏json字符串需要浏浏浏浏{、}、:等特殊字符行相理。浏浏浏浏浏浏浏 4、于的用景,我也完全可以利用浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏ActiveX的属性来化解此。例如浏浏浏浏浏浏我在浏浏ActiveX中定一个属性浏浏浏浏浏CardNo,的提供的接口只用的返浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏回一个状即可:浏浏浏浏 LONG ReadCardNo() 浏浏浏浏浏浏浏浏浏接口返回仍然表示状,如0表示卡成功,浏浏浏浏浏1表示未找到卡等等。当返回浏浏浏浏浏浏浏浏浏浏0浏,浏浏浏浏浏浏浏浏浏卡成功,的卡号从属性CardNo中取即可。浏浏浏浏浏 浏浏器件之插 ActiveX 浏浏;三, ActiveX插件如果想在Html中浏行引用~必浏先浏件插ocx文件浏行注~通浏册即regsvr32将册两来达个浏控件注到用浏的操作系浏里。在浏浏浏用中~一般有浏方式到浏目的, 一、通浏安程序注装册ActiveX 浏浏方式非常直浏~就是制作一浏浏的安程序~浏安程序的任浏就是打包的个装装将ocx文件及其依浏文件解浏浏制到系浏目浏位置~然后再通浏浏行regsvr32命令已浏制到用浏机器目浏位置的将 ocx文件注到系浏中。册当web浏面中需要浏用相浏的ActiveX浏~在浏著位置提示用浏需下浏指定将 的程序行安。并运装 浏浏多浏用程序在安浏都浏含地向系浏注了一些很装册ActiveX的~例如QQ、浏信、播放器等~浏浏相浏的web就更加活。不浏~不是所有的灵并ActiveX插件都是以ocx文件呈浏的~也可以是dll文件。 二、通浏cab包由IE自浏注册 能否在web浏面需要引用ActiveX浏由IE自浏下浏浏浏的件自浏安,然可以。我浏插并装呢当 要做的就是要将ocx及其他文件打包成一个cab文件~然后浏将cab文件放在web服浏器上~并在web浏面中通浏的方式浏行浏用。 cab浏浏上是微浏浏定的一特殊格式的浏浏文件~制作个cab包浏程浏浏,很 1、 准浏cabarc.exe工具~浏工具可以在浏里下浏~也可以微浏从下浏~ 2、 将ocx文件及依浏的其他文件放到同一目浏下~在浏目浏下浏建一后浏浏个并个.inf的文件;文件名可任意取~一般与ocx文件同名~例如MyTestActiveX.inf,~文件容如下,内[version] signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] MyTestActiveX.ocx=MyTestActiveX.ocx mwhrf_bj.dll = mwhrf_bj.dll [MyTestActiveX.ocx] file=thiscab clsid={1345C26B-E979-45A5-997D-9427FB81E707} FileVersion=1,0,0,1 RegisterServer=yes DestDir=11 [mwhrf_bj.dll] file=thiscab FileVersion=1,0,0,0 DestDir=10 a) signature="$CHICAGO$"表示浏个.INF文件和Windows95或其后版本和Windows NT 4.0或其后的版本兼容。 b) [Add.Code]下面的容用于定浏浏内cab需要下浏的各文件浏浏的定浏浏~左浏浏文件名~区等右浏浏定浏域名~一般浏易浏均定浏的域名文件名相同。号区将区与 c) 各文件的定浏域分浏定浏了浏文件的各浏性区属: file,表示浏文件的浏取位置~此浏thiscab表示浏文件就包含在浏cab中~如果在其他位置而不在cab包中~浏可以上具的位置如写体 clsid, 只有需要注的册ocx文件才浏置浏性~他的浏就是改个属ocx的唯一classid~可以浏目的从.idl文件中最下方浏~找 FileVersion,文件版本。号一般将ocx文件的版本浏同浏整号个cab的版本~号在浏浏浏用ActiveX 1、Object浏浏基本用法 在Html浏面中浏用ActiveX插件最浏浏常用的方法是, id属性就不用解浏了~和html中其他元素的id一浏~是DOM浏中各元素的唯一浏浏。width和height表示浏ActiveX在Web浏面中占位的大小~浏于浏提供接口无UI界面的ActiveX来浏将其浏置浏0即内可~因浏不需要在浏面上浏示任何容;浏于需要浏示界面的ActiveX~需要在浏目里浏建Dialog及相浏浏浏~可以考“写参A Complete ActiveX Web Control Tutorial”浏例 ,。 classid属个属性在浏里是一非常浏浏的性~IE正是通浏他才能正到要浏用的确找ActiveX的。每个ActiveX均有一唯一的个id来表示~浏就是classid~在我浏浏建MFC ActiveX Control浏目浏Vs.net 2008就我浏生成了浏帮个id, 可以在程序的.idl文件最下方到浏找个ID浏, 一般不建浏手浏修改程序中的浏个uuid浏~因浏在xxxxCtrl.cpp文件中也用到了浏个id浏~只是表浏形式不一浏浏了, 控件注成功后~浏册个classid及控件文件位置等信息均入注表了~如下所示,写册 然~如果当ActiveX浏定浏了其他性~也可以在属中以性的属形式浏他浏浏浏。 如果用浏的浏算机已浏注了浏件;例如通浏册插Setup.exe方式,~那浏Html引用上段代浏后就可以通浏js浏用件的接口和性了;插属再次提示一下~ActiveX只能在IE浏浏器行~也就运是浏段代浏在firefox等其他浏浏器是不能正常工作的,。
Read Card No Testing ,卡号
Write Card No Testing ,卡号
2、使用Object浏浏浏如何判断ActiveX是否已注册 外也可以通浏浏浏另ActiveX中的某已个属来断插装知已定浏的性判件是否已安~如果返 回的性浏浏属undefined~浏表示有浏浏到件。例如,没插 3、如何浏IE自浏下浏安件装插并智能升浏 如果浏浏到件有安~浏浏插没装怎IE自浏指定位置下浏件自浏安,浏浏~在从插并装呢很object浏浏中使用codebase属即性可, codebase的浏格式浏“xxxxx.cab#version=1,0,0,1”。'#'前面部分浏cab文件的位置~可以是在服浏器上的浏浏位置~也可以是相浏位置。'#‘后面部分表示前引用的当cab包的版本。号当IE浏浏到系浏有注指定件~便没册插从codebase指定的位置下浏浏cab到本地~按照其并中.inf文件的描述各文件浏制到指定位置注指定的控件。;将并册注,在浏浏浏用中涉及浏名浏浏~后文再述, 使本地已浏注了浏件~即册插IE浏将册号与拿已注的控件版本codebase中指定的版本相号比浏~如果codebase中指定的版本大于已注件的版本~号册插号IE仍然会从codebase指定位置下浏cab包并册插重新注浏浏件。 正如前面的文章所提~浏方便管理~一般将cab包中需注的册ocx文件的版本浏同号cab版本。号 件或件依浏的文件需要升浏浏~只需更新相浏的文件~浏当插插并.inf中的相浏文件版本升浏(浏方便管理~无浏是否更新了ocx文件~浏ocx文件的版本也号跟着升浏~因浏其版本代表了整号个cab)~然后重新打包成cab浏布到服浏器上~更新并html中object浏浏中codebase属性浏的version部分版本。用浏下次浏浏浏浏面浏~号当IE将自浏下浏升浏后的cab并册插重新注件。浏浏上~浏浏我的浏浏~及浏服浏器上的cab包不做任何浏化~只要增加codebase中version的浏~浏浏件均插会册重新下浏和注。 二、通浏javascript的new ActiveXObject来浏用ActiveX 如果不使用object浏浏~也可以直接通浏js的ActiveXObject来浏建指定ActiveX的浏例从达插而到浏用件接口的目的;IE下xmlhttpRequest的浏用就是浏原理,。例如,个 var objCard = new ActiveXObject("Uprain.CardAccessorCtrl.1"); 如果件已浏注~接下就可以通浏插册来objCard来插属浏用件接口和浏浏性了。 ActiveXObject函的浏浏浏浏件的数参数插ProgId而非CLASSID。在浏目中xxxxCtrl.cpp文件中同浏可以到或修改浏浏件的找插ProgId浏~如下浏, 即IMPLEMENT_OLECREATE_EX的第二就表示前件的参数当插ProgId~浏浏可以根据浏浏需要自行修改。浏浏上~在注表中通浏册ProgId是可以到浏浏的找ClassId的~两者是有浏浏的, 那浏如何判断ActiveX是否已浏安,浏浏上如果装呢ActiveX未安~通浏装new ActiveXObject的方式浏建件浏来插会象是抛出“Automation 服浏器不能浏建浏象”常的。所异以用如下方式可,即 try { objCard = new ActiveXObject("Uprain.CardAccessorCtrl.1"); } catch (e) { alert("浏用ActiveX失浏,"); } 不浏~我在浏浏浏浏浏程中遇到浏情,两况 1, 出浏“Automation 服浏器不能浏建浏象”常的不一定就表示件安~也有可异并插没装 能是因件插从未浏浏初始化或脚本安全接口~而被IE浏截~需要浏整IE“工具-浏浏-安全-自定浏浏浏”中“ActiveX控件和件”部分的浏置~插 2, 有浏候~同浏已注的件~通浏册插object浏浏引用的方式能正常浏用接口~但通浏new ActiveXObject的方式浏浏用件接口插失浏。 浏浏器件之插ActiveX浏浏;五, 前面四篇文章都是在描述如何用C++浏浏基于MFC的ActiveX插件以及如果插件浏浏浏浏行打包和在Web浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏面中用,但确忽略了一个非常重要的:代名。《浏浏器插件之ActiveX浏浏,三,》提及了两注册插件的方法,其中浏浏浏浏浏浏浏浏浏浏浏IE自下并注册插件的浏浏浏浏浏浏浏浏浏方法就及到名,如果涉浏浏浏浏浏浏浏cab包是未名的或名不被信浏浏浏浏浏浏浏浏浏浏浏浏任的,IE就拒浏浏浏浏浏浏浏注册插件。 浏浏浏浏一、数字名述 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏在的各件星密布、混,用在使用件程序一定 要十分浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏慎,稍不留意,就被病毒或意程序侵害。代数字名的出就在一定程浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏度上解决了个。那数字名 的件有浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏什好,件一旦数字名,至少可以保以下两点: 1,件确是由数字名中示的件商的浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏, 2,件自件商浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏布以后,没有被第三方做任何修改。 浏浏浏浏浏浏浏浏浏浏浏浏不,要完全理解数字名或PKI,数字名是浏浏浏PKI的成部浏浏浏浏浏分,Public Key Instructure,,需要理解一下基本常,例如称加浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏密、非称加密、摘要算法、公浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏、私、数字、根等等。以下几篇文章均些浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏概念做了通俗易懂的解: a) 白浏浏浏浏浏数字名 b) CA浏浏浏浏原理以及 c) 了解数字浏浏 d) 浏浏浏浏浏浏浏浏浏浏件代数字名基本原理 e) 数字名浏浏 f) 浏浏浏浏什需要PKI g) 数字名,浏浏浏浏浏浏浏浏浏浏代名, h) 12306在浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏火票什需要安装根 浏浏浏二、什ActiveX需要数字名,浏浏浏 由于ActiveX插件在运行与本地浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏桌面用程序一,用系的源有极大的限,如果浏浏浏浏浏浏浏浏浏浏任何ActiveX通浏Web浏浏浏浏浏浏浏浏浏浏面都能自下并注册的,那用必将浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏造成非常大的威。所以默置下,IE将需自下的浏浏浏浏浏浏浏cab文件行数浏浏浏字名,只有数字名了且名通的浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏cab包才自下并注册到用浏浏浏浏浏浏浏浏浏浏浏浏浏系中。 一般地,不需要浏浏浏浏浏cab包行浏浏浏浏浏浏浏浏浏代名,在打cab包之前浏浏浏会ocx文件行浏浏浏浏浏浏浏代名。 浏浏浏浏浏浏浏三、如何行代名, 1、首先需准用于浏浏浏浏浏浏浏浏浏浏浏浏代名的相工具SignTool.exe,可以从里浏浏下浏。 2、申浏浏浏浏可用于ocx文件名的浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏代名数字,一般是需付的。如果是用,可以有几方式:浏浏浏浏浏浏浏浏浏浏浏浏 a) 自己浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏建一个名以及根, b) 可以从www.ca365.com网站申免代浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏名或,用需 自入浏浏浏浏浏浏浏浏浏浏浏浏浏浏根到用系里,, c) 借用淘宝的支付宝浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏个支,淘宝付宝每用都可以一个数字,。 浏浏浏浏浏浏浏浏浏浏浏浏浏申数字的程上是: 1) 在申浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏者的算机上建一个密,即一个私和一个公浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏,私保留在申者算机内,将公送CA机构, 2) CA机构在通必要的下浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏核后,和免相当于没有浏浏浏浏浏浏浏浏核程的,,用CA自己的私申浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏者的申信息行名,申者信息包括申浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏者来的公、申者自身基本信息等,,并加上戳。CA浏浏浏浏浏申信息行加密后就生成了一个,一般是以浏浏浏浏浏浏浏.cer文件的形式下浏浏浏浏浏浏申者。 3、用signTool工具浏浏浏浏浏浏浏浏文件行名: Signtool sign /f "xxxx.pfx" /d "卡写浏浏浏浏浏机ActiveX" /du /t ;xxxxx.cab" 其中: xxxx.pfx 是名,上包含了浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏代名数字和私,在IE的浏浏浏浏浏浏浏管理容器里“”浏浏浏浏浏浏浏浏浏浏浏浏浏个人里出可以包含私,, 是浏浏浏浏浏浏戳服。 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏有代名以及建名的以下文章均有介,不再述: • a) 制作浏浏浏浏浏ActiveX控件名浏浏 • b) 浏浏浏控件做数字名 • c) 微代浏浏浏浏浏浏浏浏浏浏浏名使用指南 • d) VeriSign代浏浏浏浏浏浏浏浏浏浏名技白皮_v1.0_090413 • e) VC++浏浏Activex控件以及名浏浏浏浏布 • f) VC2005从浏浏MFC ActiveX ocx控件到浏浏浏布到.net网站的全部程浏浏 • g) ActiveX的数字名浏浏 • h) A Complete ActiveX Web Control Tutorial – CodeProject 浏浏浏浏浏浏浏浏四、根自安装 如果数字名是从浏浏浏浏浏浏VeriSign等机构的,一般不存在浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏根,因微的IE已默将浏浏浏浏VeriSign浏浏浏浏浏浏浏浏浏浏浏浏浏置受信任的根机构了: 但如果是从CA365浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏不是很威的机构申的,由于些机构的根默并不在IE的“浏浏浏浏”浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏受信任的根机名里,所以在使用需要先在用上将构CA365的根手浏浏浏 浏浏浏浏浏浏浏浏入去。其,12306.cn网站的根浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏就是自己自己的,所以其网站上就明文提示需要自浏浏浏浏浏浏浏安装根: 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏于大部分用来,什什叫数字名什叫根之的 概念是一浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏水的,他自己安装根感有点憋屈。如果能IE自己自浏浏浏浏浏浏安装根就好了。理上是可以自浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏安装的,但由于限的用起来 不是那浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏爽,用体仍然很差。其原理就是利用微的CAPICOM浏件和xenrlinf浏浏浏件本地行操作从而达到浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏根是否存在以及安装的目的的,以下有两个文章此做了描述:浏浏浏浏浏浏浏 a) 将Capicom浏浏浏浏浏用代封装到ActiveX——解决javascript浏Capicom浏浏浏浏取数字信息,浏浏IE浏浏浏出安全提示的 b) 使用CAPICOM浏浏浏浏管理 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏上海券社程公系就使用了自安装根的方法: 另外,在CA365上也提供了自浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏安装根的代例子,如何在用的客机浏浏浏浏浏浏浏浏浏浏浏浏浏上自安装根,,: 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏只不个例子在运行一般会出,以下句是建象失: Set st = CreateObject("CAPICOM.Store") 浏浏浏浏浏浏究其原因,是器ActiveX的安全置,浏浏浏浏浏浏浏降低IE浏ActiveX的安全置就可以了,浏浏浏浏浏浏但个要求于用来浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏一将根步步太麻了,不然用自己一 浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏浏入系中,或者自己包装一个安装程序,运行后自入根。
/
本文档为【浏览器插件之ActiveX开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索