How to know if browser has PDF viewer or not?

前端 未结 4 2238
再見小時候
再見小時候 2021-02-13 04:38

I am viewing PDF into iframe. It works fine. But some of the client don\'t able to see it in IE. They get it as download option.

How can I identify if browser has pdf v

4条回答
  •  不要未来只要你来
    2021-02-13 05:00

    There is a JS solution :

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

    Known that API getAcrobatInfo is :

    // 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()
      };
    };
    

提交回复
热议问题