如何知道浏览器是否有PDF阅读器?

2024-01-10

我正在 iframe 中查看 PDF。效果很好。但有些客户端在 IE 中看不到它。他们将其作为下载选项。

如何识别浏览器是否有pdf查看器并提示用户没有pdf查看器?

注意:我使用的是 asp.net mvc 5 (c#)。

I tried this https://stackoverflow.com/questions/5640719/webbrowser-detect-if-there-is-a-pdf-reader-installed,但别帮我。我遇到的问题是一些客户有 Adob​​e PDF,所以下面的答案没有问题。但是那些有 nitropdf 或 chrome pdf 查看器的人,下面的答案对我没有帮助。我想识别所有 pdf 查看器。否则,如果客户端有某种 pdf 查看器,那么还会显示没有安装 pdf 查看器的警报。那是错误的事情。

我通过获得帮助来应用此代码约巴德·阿纳尔·阿图姆的回答 https://stackoverflow.com/a/24056048/3330969它适用于 chrome 和 mozilla。这是我修改的js http://pastie.org/9272642.

But IE仍然没有反应。我不知道如何在 IE 中检查它是否有 pdf 查看器。 对于 IE,尽管有 pdf 查看器,但我收到以下错误:


有一个JS解决方案:

var hasPdfViewer = getAcrobatInfo().acrobat ==="installed";

已知 API getAcrobatInfo 是:

// 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)     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()
  };
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道浏览器是否有PDF阅读器? 的相关文章

随机推荐