首页 文章

用JavaScript检测ie11中的Adobe Reader

提问于
浏览
2

我试图检测IE11的Adobe Reader插件,但由于某种原因它总是返回null . 我认为这是因为IE11不使用与旧版Internet Explorer相同的插件名称,但我不确定 .

我直接从这个网站获得了我的代码(来自这个网站的用户!):http://thecodeabode.blogspot.com/2011/01/detect-adobe-reader-plugin.html

该代码在Windows 7上运行良好,直到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('

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('

Version ' + info.acrobatVersion + ' is installed.'); }

3 回答

  • 1

    if(userAgent.indexOf("msie") > -1) 将不再在IE11中完成工作,因为the user agent string has changed . 对于IE11,您必须查找 Trident .

    MediaElement.js worked around this喜欢这样:

    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";
    
  • 3

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

    http://msdn.microsoft.com/en-us/library/ie/dn423948(v=vs.85).aspx

  • 0

    userAgent.indexOf("msie") 在IE11中不起作用 . 嘿改变了用户代理字符串 . 所有其余的都是由此完成的,因为所有的 getBrowserName() == ie 测试都会失败 .

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

相关问题