用JavaScript检测ie11中的Adobe Reader

用JavaScript检测ie11中的Adobe Reader,javascript,detect,acrobat,internet-explorer-11,Javascript,Detect,Acrobat,Internet Explorer 11,我试图检测用于IE11的Adobe Reader插件,但由于某些原因,它总是返回null。我相信这是因为IE11没有使用与旧版本IE相同的插件名称,但我不确定 我直接从本网站获得代码。本网站的用户!: 该代码在Windows7上的IE11之前一直运行良好,在getAcrobatVersion中返回null 以下是完整的代码,便于大家使用: var getAcrobatInfo = function() { var getBrowserName = function() {

我试图检测用于IE11的Adobe Reader插件,但由于某些原因,它总是返回null。我相信这是因为IE11没有使用与旧版本IE相同的插件名称,但我不确定

我直接从本网站获得代码。本网站的用户!:

该代码在Windows7上的IE11之前一直运行良好,在getAcrobatVersion中返回null

以下是完整的代码,便于大家使用:

var getAcrobatInfo = function() {

      var getBrowserName = function() {
        return this.name = this.name || function() {
          var userAgent = navigator ? navigator.userAgent.toLowerCase() : "other";

          if(userAgent.indexOf("chrome") > -1)        return "chrome";
          else if(userAgent.indexOf("safari") > -1)   return "safari";
          else if(userAgent.indexOf("msie") > -1)     return "ie";
          else if(userAgent.indexOf("firefox") > -1)  return "firefox";
          return userAgent;
        }();
      };

      var getActiveXObject = function(name) {
        try { return new ActiveXObject(name); } catch(e) {}
      };

      var getNavigatorPlugin = function(name) {
        for(key in navigator.plugins) {
          var plugin = navigator.plugins[key];
          if(plugin.name == name) return plugin;
        }
      };

      var getPDFPlugin = function() {
        return this.plugin = this.plugin || function() {
          if(getBrowserName() == 'ie') {
            //
            // load the activeX control
            // AcroPDF.PDF is used by version 7 and later
            // PDF.PdfCtrl is used by version 6 and earlier
            return getActiveXObject('AcroPDF.PDF') || getActiveXObject('PDF.PdfCtrl');
          }
          else {
            return getNavigatorPlugin('Adobe Acrobat') || getNavigatorPlugin('Chrome PDF Viewer') || getNavigatorPlugin('WebKit built-in PDF');
          }
        }();
      };

      var isAcrobatInstalled = function() {
        return !!getPDFPlugin();
      };

      var getAcrobatVersion = function() {
        try {
          var plugin = getPDFPlugin();

          if(getBrowserName() == 'ie') {
            var versions = plugin.GetVersions().split(',');
            var latest   = versions[0].split('=');
            return parseFloat(latest[1]);
          }

          if(plugin.version) return parseInt(plugin.version);
          return plugin.name

        }
        catch(e) {
          return null;
        }
      }
      // The returned object
      return {
        browser:        getBrowserName(),
        acrobat:        isAcrobatInstalled() ? 'installed' : false,
        acrobatVersion: getAcrobatVersion()
      };
    };

    var info = getAcrobatInfo();
    if(info.acrobat){
        //IE11 will return false even if you have adobe reader because it's a terrible browser.
        document.write('<img src="img/sysChkErr.gif" alt="" border="0">');
        document.write('<span style="color: ' + errCol + '"><strong>Not Installed</strong></span>');
        document.write('<br /><br />Some of our applications require Adobe Reader. You can download Adobe Reader ');
        document.write('<a href="http://get.adobe.com/reader/" target="_blank">here</a>.');
    }else{
        document.write('<img src="img/sysChkPas.gif" alt="" border="0">');
        document.write('<span style="color: ' + pasCol + '"><strong>Installed</strong></span>');
        document.write('<br /><br />Version ' + info.acrobatVersion + ' is installed.');
    }
userAgent.indexOfmsie在IE11中不起作用。嘿,更改了用户代理字符串。接下来的所有测试都将失败,因为所有getBrowserName==ie测试都将失败

将检测代码更改为适用于所有IE版本,查找trident而不是/以及msie,或者使用不同的方法确定要执行的操作检测activeX对象的存在可能是一个很好的选择

userAgent.IndexOfSie在IE11中不起作用。嘿,更改了用户代理字符串。接下来的所有测试都将失败,因为所有getBrowserName==ie测试都将失败

将检测代码更改为适用于所有IE版本查找trident而不是/以及msie,或者使用不同的方法确定要执行的操作检测activeX对象的存在可能是一个好的选择

ifuserAgent.IndexOfSie>-1将不再在IE11中执行此操作,因为。对于IE11,你必须寻找三叉戟

像这样:

t.isIE = (nav.appName.match(/microsoft/gi) !== null) || (ua.match(/trident/gi) !== null);
所以我想这可能对你有用

  else if(userAgent.indexOf("msie") > -1 || userAgent.indexOf("trident") > -1)  return "ie";
ifuserAgent.IndexofSie>-1将不再执行IE11中的作业,因为。对于IE11,你必须寻找三叉戟

像这样:

t.isIE = (nav.appName.match(/microsoft/gi) !== null) || (ua.match(/trident/gi) !== null);
所以我想这可能对你有用

  else if(userAgent.indexOf("msie") > -1 || userAgent.indexOf("trident") > -1)  return "ie";

你不需要做一大堆疯狂的浏览器检测。IE11使这变得更容易,因为他们现在支持navigator.plugins。如果您看到该对象,请使用适用于Chrome或Firefox的相同方法


你不需要做一大堆疯狂的浏览器检测。IE11使这变得更容易,因为他们现在支持navigator.plugins。如果您看到该对象,请使用适用于Chrome或Firefox的相同方法


理论上,IE11应该像所有其他浏览器一样为其插件使用navigator.plugins。实际上,情况似乎并非总是如此,因此您可能需要尝试同时检查这两种情况。我在Flash中遇到了这个问题——我的开发计算机使用ActiveXObject,然后另一个人的计算机在浏览器中使用标准插件list@Katana314:听起来可能是兼容模式导致的?@Spudley例如:在堆栈溢出上,my navigator.plugins对象是一个空数组。然而,在附近办公室的另一台计算机上,可能是最近安装了Flash的地方,它是一个带有许多插件对象的阵列,比如Flash。在开发人员工具中,仿真模式显示两者的边缘法线。这是微软的页面,其中有一个很好的代码示例,说明如何最好地检测Silverlight,使其适合您想要的插件:理论上,IE11应该像所有其他浏览器一样,为其插件使用navigator.plugins。实际上,情况似乎并非总是如此,因此您可能需要尝试同时检查这两种情况。我在Flash中遇到了这个问题——我的开发计算机使用ActiveXObject,然后另一个人的计算机在浏览器中使用标准插件list@Katana314:听起来可能是兼容模式导致的?@Spudley例如:在堆栈溢出上,my navigator.plugins对象是一个空数组。然而,在附近办公室的另一台计算机上,可能是最近安装了Flash的地方,它是一个带有许多插件对象的阵列,比如Flash。在开发人员工具中,仿真模式显示两者的边缘法线。下面是微软的网页,其中有一个很好的代码示例,说明如何最好地检测Silverlight,使其适合您想要的插件:Huzzah!这管用!老实说,我对navigator对象是全新的,甚至不确定我在寻找什么,我只是有一个想法。今天我学到了很多,非常感谢你的帮助!我知道这是一个老问题,但我面临IE10的问题。当我使用上述问题的代码时,我得到了警告:自动化服务器无法创建对象。我的浏览器中有pdf查看器。我的问题:非常感谢!我从来没有想过我会找到一个帖子,其中有人使用了从互联网下载的相同的精确文件,有着相同的精确问题和有效的答案。给你一票,呼!这管用!老实说,我对navigator对象是全新的,甚至不确定我在寻找什么,我只是有一个想法。今天我学到了很多,非常感谢你的帮助!我知道这是一个老问题,但我面临IE10的问题。当我使用上述问题的代码时,我得到了警告:自动化服务器无法创建对象。我的浏览器中有pdf查看器。我的问题:非常感谢!我从来没有想过我会找到一个帖子,其中有人使用了从互联网上下载的与sa完全相同的文件
用一个有效的答案回答我的问题。我知道这是一个老问题,但我面临IE10的问题。当我使用上述问题的代码时,我得到了警告:自动化服务器无法创建对象。我的浏览器中有pdf查看器。我的问题:我知道这是一个老问题,但我面临IE10的问题。当我使用上述问题的代码时,我得到了警告:自动化服务器无法创建对象。我的浏览器中有pdf查看器。我的问题:我知道这是一个老问题,但我面临IE10的问题。当我使用上述问题的代码时,我得到了警告:自动化服务器无法创建对象。我的浏览器中有pdf查看器。我的问题:我知道这是一个老问题,但我面临IE10的问题。当我使用上述问题的代码时,我得到了警告:自动化服务器无法创建对象。我的浏览器中有pdf查看器。我的问题: