2014-11-05 12 views
5

हमारे पास कुछ पीडीएफ फॉर्म हैं जो गैर-एडोब पीडीएफ पाठकों में सही ढंग से प्रदर्शित नहीं होते हैं (यानी वेबकिट के अंतर्निहित पीडीएफ रीडर ठीक से कुछ मालिकाना एडोब चीजें प्रदर्शित नहीं करते हैं)। हम पता लगाने के लिए जब उन एडोब के पीडीएफ रीडर स्थापित नहीं है और उन्हें एक छोटे से चेतावनी दे चाहते हैं, लेकिन मैं एक मुश्किल समय पता लगाना कैसे 2014जावास्क्रिप्ट पता लगाएं कि क्या एडोब रीडर स्थापित है

में यह करने के लिए ऐसा लगता है this script 2011 में काम किया हो रही है मूल रूप से यह navigator.plugins के माध्यम से loops और Adobe Acrobat या Chrome PDF Viewer नाम के साथ प्लगइन्स की तलाश करता है। आज के

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

फ्लैश आगे, एडोब कुछ बदल रहा हो, क्योंकि मैं एडोब एक्रोबेट स्थापित है, लेकिन यह navigator.plugins में होना प्रतीत नहीं होता है! अब यह कहां है और मैं इसे कैसे पहचानूं?

+0

मैं यहाँ है कि स्क्रिप्ट परीक्षण किया है और यह दोनों फ़ायरफ़ॉक्स और क्रोम में बिल्कुल ठीक काम करता है। हालांकि आईई इसे पसंद नहीं करता है। – icecub

+0

क्या आपके पास 'एडोब रीडर' का पुराना संस्करण है? यह मेरे कंप्यूटर पर प्लगइन की सूची में भी दिखाई नहीं देता है। – brentonstrine

+0

ये। मैं आईई के लिए इस पर काम कर रहा हूँ। ऐसा लगता है कि स्क्रिप्ट आईई ब्राउज़र का पता नहीं लगाती है। ओह और मुझे एडोब रीडर एक्सआई मिला है – icecub

उत्तर

10

ठीक है मैं स्क्रिप्ट को नवीनीकृत किया है और यह अब सभी ब्राउज़रों में बिल्कुल ठीक काम कर रहा है:

<!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

धन्यवाद - गैर-एक्सप्लोरर फ्रंट पर, मैंने पाया कि एडोब क्रोम में एक्रोबैट इंस्टॉल नहीं करता है, यह फ़ायरफ़ॉक्स में करता है, लेकिन स्क्रिप्ट इसका पता नहीं लगा रहा था क्योंकि यह था 'if (plugin.name == name) 'कर रहा है, लेकिन चूंकि नाम' एडोब एक्रोबैट एनपीएपीआई प्लग-इन, संस्करण 11.0.0 9 'है, जो कि झूठ बोल रहा था। रेखा को शायद 'if (plugin.name.indexOf (name)> - 1) में बदला जाना चाहिए। मुझे अभी भी पता नहीं है कि प्लगइन क्रोम में क्यों नहीं है। – brentonstrine

+1

वैसे मैंने अपने क्रोम या एडोब रीडर के साथ कभी भी अजीब कुछ नहीं किया है और उपरोक्त स्क्रिप्ट क्रोम में बस ठीक है। तो मुझे यह बहुत अजीब लगता है कि यह आपके लिए काम नहीं करता है। – icecub

+0

आह, मैंने सोचा कि यह सिर्फ मुझे नहीं था क्योंकि कार्यालय में हर किसी के पास एक ही परिणाम था। हमने क्रोम को एक ही अजीब बात करनी होगी! – brentonstrine

संबंधित मुद्दे