利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件

利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件(转)从微软给IE打上SP2以后,当IE在打开一些含有ActiveX控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件;现在默认情况下给隐藏起来,普通用户根本不知道是怎么回事。公司产品同样也遇到这样的问题,唯一的办法就是将控件做成一个exe文件,供用户下载手动安装注册;这样就需要

大家好,又见面了,我是你们的朋友全栈君。

利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件 (转)

从微软给IE打上SP2以后,当IE在打开一些含有ActiveX控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件;现在默认情况下给隐藏起来,普通用户根本不知道是怎么回事。公司产品同样也遇到这样的问题,唯一的办法就是将控件做成一个exe文件,供用户下载手动安装注册;这样就需要做一个检测,检测要是用户没有安装控件的话就提示用户用户下载安装,要是安装了就直接转到相关页面。想了很多办法,最后找到一种比较合理的解决方式。由于我们现在经常使用的ajax技术,它实际上就是一种com组件,通过接口实现发送请求和获取数据,那么我们要使用ajax,就必定要创建这样一个com组件,所以我们可以从这里入手来解决检测普通控件是否被拦截的问题。

   javascript创建ActiveX控件方式如下:

function 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,如果不成功则给出提示,其检测函数相信大家已经再熟悉不过了,只不过我们现在的目的不一样了,呵呵。

function 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;
   }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146376.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql的字符串拼接函数怎么用_拼接字段的函数是什么

    mysql的字符串拼接函数怎么用_拼接字段的函数是什么MySQL的字符串拼接有三个函数CONCAT(str1,str2,…)CONCAT_WS(separator,str1,str2,…)GROUP_CONCAT(expr)这三个函数都各有作用,现在测试看看是什么样子的效果准备数据表CREATETABLE`user_info`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(255)DEFAULTNULL,`age`int(3)DEFAULTNULL,

    2025年7月13日
    4
  • HandlerSocket简介及安装及卸载

    HandlerSocket简介及安装及卸载HandlerSocket是日本人akirahiguchi写的一个MySql的插件。通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了MySQL上层的SQL解释、打开关闭表、创建查询计划等CPU开销。按照作者给出的数据可以在数据全部在内存的情况下可以达到75W的QPS查询。总之,它对mysql数据库的操作比mysql本身的操作语句快很多。  适用场景

    2022年8月24日
    9
  • Linux修改文件内容【命令】

    Linux修改文件内容【命令】在/opt/hello/world.txt文件中增加一行 hellolinuxworld!方法一:命令是:vi,vimvi编辑器,相当于记事本,有编辑功能,但较弱vim复杂的编辑器,相当于windows的editplus,notepad++等————————步骤:1、执行viworld.txt 进入编辑器(默认

    2022年7月26日
    23
  • ssm框架过时了吗_spring实战

    ssm框架过时了吗_spring实战SpringSpring是一个开源的免费的框架Spring是一个轻量级的,非入侵式的框架控制反转(IOC),面向切面编程(AOP)支持事务的处理,对框架整合的支持IOC理论UserDaoUserDaoImpUserSeviceUserServiceImp在之前,用户的需求可能会影响原来的代码。使用一个set。public void setUserDao(UserDao userDao){ this.userDao = userDao;}之前是主动创建对象,控制

    2022年8月8日
    5
  • java 向上取整方法 Math.ceil() 用法、源码分析

    java 向上取整方法 Math.ceil() 用法、源码分析刷题用到了,正好好好看看源码。

    2022年6月21日
    56
  • vue 父组件调用子组件_react父组件向子组件传值

    vue 父组件调用子组件_react父组件向子组件传值Vue中子组件调用父组件的三种方法:1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。父组件<template><div><child></child></div></template><script>importchildfrom’./components/childcomponent’;exportdefault{co

    2022年10月3日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号