Reader的JavaScript检测

Reader的JavaScript检测

本文介绍了如果安装Adobe Reader的JavaScript检测的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有一些PDF表单在非Adobe PDF阅读器,显示不正确(即WebKit的内置PDF阅读器正常显示一些专有的Adobe的东西)。我们想检测时,用户不用的安装了Adobe的的PDF阅读器,并给他们一个小小的警告,但我有一个很难搞清楚如何做到这一点在2014年。

We have some PDF forms that don't display correctly in non-Adobe PDF readers (i.e. WebKit's built-in PDF reader does not properly display some proprietary Adobe things). We want to detect when users don't have Adobe's PDF Reader installed and give them a little warning, but I'm having a hard time figuring out how to do it in 2014.

看来这个剧本在2011年工作基本上它遍历 navigator.plugins 并查找插件名为安装Adobe Acrobat Chrome浏览器PDF阅读器

It seems this script worked in 2011. Basically it loops through navigator.plugins and looks for plugins with the name Adobe Acrobat or 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 !现在哪里是它,我怎么发现的呢?

Flash forward to today, Adobe must have changed something, because I have Adobe Acrobat installed, but it doesn't seem to be in navigator.plugins! Where is it now and how do I detect it?

推荐答案

好吧,我已经更新了脚本,它的工作完全没有在所有浏览器都:

Ok I've updated the script and it's working perfectly fine in all browsers now:

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

这篇关于如果安装Adobe Reader的JavaScript检测的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-28 11:11