ActiveX交互时浏览器的设置以及ActiveX控件注册的检测
2013-11-12 17:07
211 查看
这几天用到ActiveX做一个公用的组件,在使用的过程中遇到很多特殊的情况,有ActiveX无法加载,有加载了无法在js里调用等很多状况...头大。
以下内容部分是从网络上搜集整理的,部分是通过自己实践总结的,从网上搜集的部分因为多数只引用了片段,所以未能注明出处。
如果遇到js无法访问ActiveX的情况,可以使用以下步骤解决:
4、控件未注册或未加载的解决办法
1、检测IE是否禁用了ActiveX,可以使用下列函数进行检测。如果IE禁用了ActiveX,则下面的函数肯定会返回false,对此的解决办法,参见第3点
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是否已经成功注册并加载到浏览器:
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)"是否被打上了勾,如果是,点击将勾去掉即可。然后重启浏览器
以下内容部分是从网络上搜集整理的,部分是通过自己实践总结的,从网上搜集的部分因为多数只引用了片段,所以未能注明出处。
如果遇到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)"是否被打上了勾,如果是,点击将勾去掉即可。然后重启浏览器
相关文章推荐
- VC++开发的ActiveX如何加入安全机制,避免IE中提示“在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗?”
- SQL Server2008 备份“已注册的服务器”设置,以及出现导入失败问题的解决办法
- 将iframe全屏显示以及检测浏览器是否全屏
- centos6.5源码安装和centos7.2使用yum安装httpd后,如何添加模块;以及怎么设置Cache-Control:max-age=?浏览器缓存时间
- jquery与php交互的ajax应用第一课:检测用户注册时用户名是否存在
- 浏览器与服务器交互原理以及用java模拟浏览器操作
- datatable与php的ajax交互以及的语言国际化-设置
- \t\t用C#编写ActiveX控件 自定义html控件 ActiveX 控件注册 标记Activex控件为脚本安全
- jquery与php交互的ajax应用第一课:检测用户注册时用户名是否存在
- 检测注册表中ActiveX控件是否被注册
- axios全局注册,设置token,以及全局设置url请求网段的方法
- jquery与php交互的ajax应用第一课:检测用户注册时用户名是否存在
- 拖拽的基本函数(已有限制范围和修复浏览器默认行为以及磁性吸附、碰撞检测、改变层大小、模拟滚动条)
- linux系统创建主分区、逻辑分区 、设置ext系列分区的参数以及检测分区的方法
- Ⅰ.8 如何实现原生浏览器对话框、ActiveX以及更多项的自动化
- 一个简单的ie6和其它浏览器区分以及设置png24的透明
- 浏览器与服务器交互原理以及用java模拟浏览器操作v
- Javascript检测浏览器类型以及操作系统
- 用于检测浏览器以及系统环境的js