2014-11-05 21 views
5

У нас есть некоторые формы PDF, которые не отображаются корректно в читателях, не относящихся к Adobe PDF (т. Е. Встроенный читатель PDF-файла WebKit не должным образом отображает некоторые фирменные вещи Adobe). Мы хотим, чтобы определить, когда пользователи не установлен PDF Reader Adobe и дать им немного предупреждение, но я с трудом выяснить, как сделать это в 2014 годуJavascript Detect, если установлен Adobe Reader

кажется this script работал в 2011 году В основном он проходит через navigator.plugins и ищет плагины с именем Adobe Acrobat или Chrome PDF Viewer.

for(key in navigator.plugins) { 
     var plugin = navigator.plugins[key]; 
     if(plugin.name == "Adobe Acrobat") return plugin; 
} 

Перенесемся на сегодня, Adobe должно быть что-то изменилось, потому что у меня установлен Adobe Acrobat, но это, кажется, не быть в navigator.plugins! Где это сейчас и как его обнаружить?

+0

Я проверил, что скрипт здесь, и это работает прекрасно как в Firefox и Chrome. IE, похоже, не нравится. – icecub

+0

У вас есть старая версия 'Adobe Reader'? Он даже не отображается в списке плагинов на моем компьютере. – brentonstrine

+0

Е. Я работаю над этим для IE. Кажется, что скрипт не обнаруживает браузер IE. О, и у меня установлен Adobe Reader XI. – icecub

ответ

10

Ok Я обновил скрипт, и теперь он работает прекрасно во всех браузерах:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <title> New Document </title> 
     <script> 
     // 
     // http://thecodeabode.blogspot.com 
     // @author: Ben Kitzelman 
     // @license: FreeBSD: (http://opensource.org/licenses/BSD-2-Clause) Do whatever you like with it 
     // @updated: 03-03-2013 
     // 
     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 || navigator.appVersion.indexOf('Trident/') > 0){ 
         return "ie"; 
        } else if(userAgent.indexOf("firefox") > -1){ 
         return "firefox"; 
        } else { 
         //return "ie"; 
         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(); 
     alert(info.browser+ " " + info.acrobat + " " + info.acrobatVersion); 
    </script> 
</head> 

<body> 

</body> 
</html> 
+1

Спасибо, что на не-Explorer-фронте я обнаружил, что, хотя Adobe не устанавливает Acrobat в Chrome, она работает в Firefox, но скрипт не обнаружил ее, потому что это было do 'if (plugin.name == name)', но так как это имя является «Adobe Acrobat NPAPI Plug-In, версия 11.0.09', то это было ложным. Вероятно, строка должна быть изменена на 'if (plugin.name.indexOf (name)> - 1)'. Я до сих пор не знаю, почему плагин не в Chrome. – brentonstrine

+1

Ну, я никогда не делал ничего странного с моим Chrome или Adobe Reader, и вышеприведенный сценарий обнаруживает, что он отлично подходит для Chrome. Поэтому мне очень странно, что это не сработает для вас. – icecub

+0

Ах, я думал, что это был не только я, потому что все остальные в офисе имели тот же результат. Мы должны были сделать все то же самое для Chrome! – brentonstrine

Смежные вопросы