您的位置:首页 > 其它

ActiveX交互时浏览器的设置以及ActiveX控件注册的检测

2013-11-12 17:07 211 查看
这几天用到ActiveX做一个公用的组件,在使用的过程中遇到很多特殊的情况,有ActiveX无法加载,有加载了无法在js里调用等很多状况...头大。

以下内容部分是从网络上搜集整理的,部分是通过自己实践总结的,从网上搜集的部分因为多数只引用了片段,所以未能注明出处。

如果遇到js无法访问ActiveX的情况,可以使用以下步骤解决:

1、检测IE是否禁用了ActiveX

2、检测指定的ActiveX控件是否已经注册并加载到IE

3、IE禁用ActiveX时的解决办法

4、控件未注册或未加载的解决办法

1、检测IE是否禁用了ActiveX,可以使用下列函数进行检测。如果IE禁用了ActiveX,则下面的函数肯定会返回false,对此的解决办法,参见第3点

/**
		 * 检测是否允许ActiveX控件运行
		 * @param true-允许ActiveX控件运行;false-不允许ActiveX控件运行
		 */
		isActiveXEnabled : function() {
			//xmlhttp对象
			var kXmlHttp = null;  
			//如果是IE浏览器
			if ($.browser.msie!=null && $.browser.msie == true) {
				//微软IE支持的xmlhttp对象
				var aVersionhs = ["MSXML2.XMLHttp.5.0",
				                  "MSXML2.XMLHttp.4.0",
				                  "MSXML2.XMLHttp.3.0",
				                  "MSXML2.XMLHttp",
				                  "Microsoft.XMLHttp"];
				//IE创建方式
				for (var i=0; i<aVersionhs.length; i++) {      
					try {
						kXmlHttp = new ActiveXObject(aVersionhs[i]);
						return true;
					} catch(e) { 
						
					}      
				}
			} else {
				try {
					//非微软IE支持的xmlhttp对象
					if (typeof XMLHttpRequest != "undefined") {
						kXmlHttp = new XMLHttpRequest();
						return true;
					}     
				} catch(e) {  
					
				}
			} 
		    return false;
		}

2、检测指定的ActiveX控件是否已经注册并加载到IE。如果Active控件未能成功注册或未能加载到浏览器,解决办法请参见第4点

1)获取ActiveX的classid。获取的方法:(假设ActiveX控件注册的时候名称是XXXXActiveX.ocx)打开注册表(命令:regedit),找到HKEY_CLASS_ROOT\CLASID项,右键CLASID项,点击【导出】按钮并将导出的数据保存到如clsid.reg文件,用文本编辑器打开clsid.reg文件,查找"XXXXActiveX"匹配的行,有一行类似[HKEY_CLASSES_ROOT\CLSID\{6425D22D-B9A8-4AE0-AF14-3D330A4710B8}]

@="XXXXActiveX Control" 的,其中{}之间的内容就是ActiveX的classid了。此处为:6425D22D-B9A8-4AE0-AF14-3D330A4710B8,该值在下一步中会使用到

2)找到ActiveX控件的ProgId。查找的方法:继续在步骤1打开的clsid.reg文件中查找所有匹配6425D22D-B9A8-4AE0-AF14-3D330A4710B8的行,有一行类似[HKEY_CLASSES_ROOT\CLSID\{6425D22D-B9A8-4AE0-AF14-3D330A4710B8}\ProgID]

@="XXXXACTIVEX.XXXXActiveX.1"的信息,其中@=后面的部分就是该ActiveX控件的ProgId了。此处为:XXXXACTIVEX.XXXXActiveX.1

3)使用如下的函数判断ActiveX是否已经成功注册并加载到浏览器:

/**
		 * 判断ActiveX控件是否已经注册并加载到浏览器
		 * @return true-已经注册,并且加载;false-未注册控件或未能成功加载ActiveX控件。
		 */
		isActiveXRegistered : function() {
			try {
				new ActiveXObject("XXXXACTIVEX.XXXXActiveX.1");
				return true;
			} catch (e) {
				
			}
			return false;
		}


3、IE禁用ActiveX时的解决办法

1)将ActiveX空间所在的网页加入受信站点;

2)打开IE浏览器的“Internet选项”,切换到“安全”页签,选中“可信站点”,并点击下面的【自定义级别】按钮;在打开的对话框中找到”对没有标记为安全的activex控件进行初始化和脚本运行“(一般的ActiveX控件都是为签名的,所以都是未标记为安全的),并选中该选项下的”启用“按钮;

3)如果第一步的检测函数isActiveEnabled中捕获了异常,且异常信息为:”Automation 服务器不能创建对象“,则可尝试以下方法(激活ADODB.Stream):

打开注册表,找到并选中项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\Active Compatability;打开该项下名为”{00000566-0000-0010-8000-00AA006D2EA4}“的子项(如果没有,则新建),在右侧面板查看是名称为”Compatibility Flags“的数据项(如果不存在,则新建该数据项(数据项类型为DWORD64),数据项的值的基数为”十六进制“),并将其值改为0;

4)重启浏览器;

如果还不行,注册一下ADODB.Stream试试,方法是:Regsvr32 c:\program files\Common FIles\System\ado\msado15.dll

4、控件未注册或未加载的解决办法

1)首先判断控件是否已经成功注册了,可以使用步骤2中的方法查看ActiveX控件对应的注册信息是否在注册表存在了;如果未成功注册,则使用命令Regsvr32注册一下控件就可以了

2)如果控件已经成功注册了,则打开IE的"Internet选项“对话框,并切换到”程序“页签,点击页签面板上的【管理加载项】按钮,将弹出IE浏览器的加载项管理界面。在”显示“下拉框中选中”所有加载项“,然后看看加载项列表里是否存在你注册的ActiveX控件,如果存在,但状态是被禁用的,则启用即可;如果不存在,查看IE浏览器菜单栏中的”安全“选项中的”ActiveX 筛选(x)"是否被打上了勾,如果是,点击将勾去掉即可。然后重启浏览器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐