【问题标题】:Javascript Detect if Adobe Reader is installedJavascript 检测是否安装了 Adob​​e Reader
【发布时间】:2015-01-02 02:18:22
【问题描述】:

我们有一些 PDF 表单在非 Adob​​e PDF 阅读器中无法正确显示(即 WebKit 的内置 PDF 阅读器无法正确显示某些专有的 Adob​​e 内容)。我们想检测用户何时没有安装 Adobe 的 PDF 阅读器并给他们一点警告,但我很难在 2014 年弄清楚如何去做。

似乎this script 在 2011 年工作。基本上它循环通过 navigator.plugins 并查找名称为 Adobe AcrobatChrome PDF Viewer 的插件。

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

快进到今天,Adobe 肯定有什么变化,因为我安装了 Adob​​e Acrobat,但它似乎不在 navigator.plugins 中!它现在在哪里,如何检测?

【问题讨论】:

  • 我在这里测试了该脚本,它在 Firefox 和 Chrome 中都运行良好。然而,IE 似乎并不喜欢它。
  • 你有旧版本的Adobe Reader吗?它甚至没有出现在我电脑上的插件列表中。
  • 是的。我正在为 IE 开发它。脚本似乎没有检测到 IE 浏览器。哦,我已经安装了 Adob​​e Reader XI

标签: javascript pdf adobe acrobat browser-plugin


【解决方案1】:

好的,我已经更新了脚本,现在它在所有浏览器中都运行良好:

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

【讨论】:

  • 谢谢——在非资源管理器方面,我发现虽然 Adob​​e 不会将 Acrobat 安装到 Chrome 中,但它会在 Firefox 中安装,但脚本没有检测到它,因为它正在执行 @987654322 @,但由于名称是 Adobe Acrobat NPAPI Plug-In, Version 11.0.09,所以这是错误的。该行可能应该更改为if(plugin.name.indexOf(name)&gt;-1)。我仍然不知道为什么插件不在 Chrome 中。
  • 好吧,我从来没有用我的 Chrome 或 Adob​​e Reader 做过任何奇怪的事情,上面的脚本在 Chrome 中检测到它很好。所以我觉得很奇怪它不适合你。
  • 啊,我以为不只是我,因为办公室里的其他人都有同样的结果。我们一定都对 Chrome 做了同样奇怪的事情!
  • Ghehe 那会是 xD 但不幸的是,我无法修复这里没有损坏的东西。 IE 无法重现您的问题。所以恐怕你只能靠自己了。
猜你喜欢
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多