检测控件是否安装的两种方式:
2010-06-09 11:27
357 查看
1.
2.
从微软给 IE 打上 SP2以后,当IE在打开一些含有 ActiveX 控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件;现在默认情况下给隐藏起来,普通用户根本不知道是怎么回事。公司产品同样也遇到这样的问题,唯一的办法就是将控件做成一个 exe 文件,供用户下载手动安装注册;这样就需要做一个检测,检测要是用户没有安装控件的话就提示用户用户下载安装,要是安装了就直接转到相关页面。想了很多办法,最后找到一种比较合理的解决方式。由于我们现在经常使用的 ajax 技术,它实际上就是一种 com 组件,通过接口实现发送请求和获取数据,那么我们要使用 ajax,就必定要创建这样一个 com 组件,所以我们可以从这里入手来解决检测普通控件是否被拦截的问题。
javascript 创建 ActiveX 控件方式如下:
+展开 -JavaScriptfunction DetectActiveX()
{
try
{
var comActiveX = new ActiveXObject(控件名称);
}
catch(e)
{
return false;
}
return true;
}
只要控件已经安装,那么创建肯定会成功(如果IE设置为禁用 ActiveX 则会失败),如果控件没有安装则会失败。这是一种简单的检测方式。那么控件名称怎么知道呢?大家在写一个 com 组件的时候,都有一个对应的 CLSID。打开自己的注册表(自己系统中已经安装了控件),在 HKEY_CLASSESS_ROOT 中查找,输入控件对应的 CLSID,会在该目录下的一个叫 CLSID 的目录中找到对应控件的注册信息,打开该节点,其中有一项是 ProgID,其对应的值就是创建该控件时所要用的名称,这样你就可以方便创建和检测你自己所设计的控件了。
由于IE不允许 javascript 访问系统功能,所以我们不能够对 IE 的相关设置做一个直接的访问,那么根据我们上面的检测试试,我们可以轻松的判定IE是否禁止运行 ActiveX 控件,这也是非常有用的一点,因为很多提示我们可能要提示用户由于什么什么原因,而导致不能使用某项 ActiveX 控件的功能。那么我们如何来进行判断呢,还记得我刚开始提到的 ajax 这个东西吧,这个东西不仅能带来更好的用户交互功能,同时也能够用在我们检测浏览器是否禁止运行 ActiveX 控件目的上来。因为 ajax 是由相关的 com 组件支持,不管是 IE,Firefox,Netscape,Opera 等其他浏览器,都有相应的实现,因为了是浏览器的标准。所以我们只要写一个通用的,支持各种浏览器创建 ajax 所要用到的 xmlhttp 对象即可,如果能创建成功,那么证明 IE 一切 OK,如果不成功则给出提示,其检测函数相信大家已经再熟悉不过了,只不过我们现在的目的不一样了,呵呵。
+展开 -JavaScriptfunction DisActiveX()
{
//xmlhttp 对象
var kXmlHttp = null;
try
{
//非微软 IE 支持的 xmlhttp 对象
if (typeof XMLHttpRequest != "undefined")
{
kXmlHttp = new XMLHttpRequest();
return true;
}
}
catch(e)
{ }
//微软 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)
{ }
}
return false;
}
<br/><br/><br/>本文来自<a href="http://www.code-design.cn">编程设计网</a>,转载请标明出处:<a href="http://www.code-design.cn/blogdetail313.html">http://www.code-design.cn/blogdetail313.html</a>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>~~~~</title> </head> <script language="javascript"> function openreg(){ if(detectPlugin('A0F5EA74-8C04-4AF7-B7EA-DCB43F53ED45','CurVersion')==false) { alert("控件未安装"); } } function detectPlugin(CLSID,functionName) { var pluginDiv = document.createElement("<div id=/"pluginDiv/" style=/"display:none/"></div>") document.body.insertBefore(pluginDiv); pluginDiv.innerHTML = '<object id="objectForDetectPlugin" classid="CLSID:'+ CLSID +'"></object>'; try { if(eval("objectForDetectPlugin." + functionName) == undefined) { pluginDiv.removeNode(true);//删除pluginDiv及其所有的子元素 return false; } else { pluginDiv.removeNode(true);//删除pluginDiv及其所有的子元素 return true; } } catch(e) { return false; } } </script> <body> <p>通过浏览器打开Topteam客户端----测试</p> <p> <input type="button" value="进入系统" onclick="openreg();"/> </p> </body> </html> |
从微软给 IE 打上 SP2以后,当IE在打开一些含有 ActiveX 控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件;现在默认情况下给隐藏起来,普通用户根本不知道是怎么回事。公司产品同样也遇到这样的问题,唯一的办法就是将控件做成一个 exe 文件,供用户下载手动安装注册;这样就需要做一个检测,检测要是用户没有安装控件的话就提示用户用户下载安装,要是安装了就直接转到相关页面。想了很多办法,最后找到一种比较合理的解决方式。由于我们现在经常使用的 ajax 技术,它实际上就是一种 com 组件,通过接口实现发送请求和获取数据,那么我们要使用 ajax,就必定要创建这样一个 com 组件,所以我们可以从这里入手来解决检测普通控件是否被拦截的问题。
javascript 创建 ActiveX 控件方式如下:
+展开 -JavaScriptfunction DetectActiveX()
{
try
{
var comActiveX = new ActiveXObject(控件名称);
}
catch(e)
{
return false;
}
return true;
}
只要控件已经安装,那么创建肯定会成功(如果IE设置为禁用 ActiveX 则会失败),如果控件没有安装则会失败。这是一种简单的检测方式。那么控件名称怎么知道呢?大家在写一个 com 组件的时候,都有一个对应的 CLSID。打开自己的注册表(自己系统中已经安装了控件),在 HKEY_CLASSESS_ROOT 中查找,输入控件对应的 CLSID,会在该目录下的一个叫 CLSID 的目录中找到对应控件的注册信息,打开该节点,其中有一项是 ProgID,其对应的值就是创建该控件时所要用的名称,这样你就可以方便创建和检测你自己所设计的控件了。
由于IE不允许 javascript 访问系统功能,所以我们不能够对 IE 的相关设置做一个直接的访问,那么根据我们上面的检测试试,我们可以轻松的判定IE是否禁止运行 ActiveX 控件,这也是非常有用的一点,因为很多提示我们可能要提示用户由于什么什么原因,而导致不能使用某项 ActiveX 控件的功能。那么我们如何来进行判断呢,还记得我刚开始提到的 ajax 这个东西吧,这个东西不仅能带来更好的用户交互功能,同时也能够用在我们检测浏览器是否禁止运行 ActiveX 控件目的上来。因为 ajax 是由相关的 com 组件支持,不管是 IE,Firefox,Netscape,Opera 等其他浏览器,都有相应的实现,因为了是浏览器的标准。所以我们只要写一个通用的,支持各种浏览器创建 ajax 所要用到的 xmlhttp 对象即可,如果能创建成功,那么证明 IE 一切 OK,如果不成功则给出提示,其检测函数相信大家已经再熟悉不过了,只不过我们现在的目的不一样了,呵呵。
+展开 -JavaScriptfunction DisActiveX()
{
//xmlhttp 对象
var kXmlHttp = null;
try
{
//非微软 IE 支持的 xmlhttp 对象
if (typeof XMLHttpRequest != "undefined")
{
kXmlHttp = new XMLHttpRequest();
return true;
}
}
catch(e)
{ }
//微软 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)
{ }
}
return false;
}
<br/><br/><br/>本文来自<a href="http://www.code-design.cn">编程设计网</a>,转载请标明出处:<a href="http://www.code-design.cn/blogdetail313.html">http://www.code-design.cn/blogdetail313.html</a>
相关文章推荐
- 检测控件是否安装的两种方式:
- listview中的radiobutton实现单选的两种方式而且可以控制另一控件button的是否可见
- 基于ADNROID 检测网络是否可用的两种方式
- 处理事件的方式:两种类的覆盖处理(自己管理,覆盖专用事件函数;自己统一管理,覆盖QWidget::Event通用函数),一种对象的处理(父控件统一管理,即安装过滤器),两种全局处理(QCoreApplication安装过滤器;覆盖notify方法)
- Eclipse安装SVN插件的两种方式
- Linux下两种方式安装apache服务器踩过的坑
- 检测客户端是否安装 Silverlight 插件
- CentOS下MySQL两种安装方式
- 检测客户端是否安装 Silverlight 插件
- nginx服务器详细安装过程(使用yum 和 源码包两种安装方式,并说明其区别)
- Android笔记:Eclipse中SVN插件的两种安装方式
- Eclipse安装插件的两种方式
- NSIS 卸载、安装检测程序是否在运行
- windows10+anaconda2+xgboost0.6的安装,VS和MinGW两种方式
- 检测用户是否安装RealPlayer播放器
- 检测用户是否打开浏览器控制台的方式
- Android检测手机是否安装某个应用
- Flex中利用sourceChanged事件检测图片(image)控件的图片源(source属性)是否改变的例子
- eclipse安装svn插件两种方式
- 移除子控件两种方式的区别