万恶之源的IE浏览器下载pdf的兼容

1、IE浏览器下载文件

  location = '文件路径'   // 简单粗暴好用的下载方式(如果是pdf文件以及有pdf插件,会直接预览,如果不想预览可以参照下面的方法)

 

2、文件流下载(IE10, IE11)

  先是浏览器的判断

  (window.ActiveXObject || "ActiveXObject" in window)   true 为IE浏览器,false 为非IE浏览器

  document.documentMode 这个方法很好用,专门判断IE浏览器的版本 返回值类型为数字 8 9 10 11等

var url = res;
var xhr = new XMLHttpRequest();
xhr.open('get', url, true); 
xhr.responseType = "blob"; // 返回类型blob
// 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
xhr.onload = function() {
  // 请求完成
  if(this.status === 200) {
    // 返回200
    var blob = this.response;
    window.navigator.msSaveBlob(blob, '文件.pdf'); // 可自定义文件名
   }
}
// 发送ajax请求
xhr.send();

3、PDF.js(我只找到了最新的版本,只能在IE11上使用,如果有低版本IE都可用的请转我一份,谢谢)

4、如果业务需要pdf预览,除了PDF.js外还可以通过判断用户是否下载Adobe Reader PDF,直接用这个插件预览(IE自身是没有带pdf预览插件的,很坑)

  

// 判断是否有PDF阅读器(true为有pdf预览插件,false表示没有) 如果有pdf插件,可以直接使用location = '文件路径' 会自动预览
function isAcrobatPluginInstall () {
  //下面代码都是处理IE浏览器的情况 
  if ((window.ActiveXObject) || (navigator.userAgent.indexOf("Trident") > -1)) {
    for(x = 2; x < 10; x++) {
      try {
       oAcro = eval("new ActiveXObject('PDF.PdfCtrl." + x + "');");
       if(oAcro) {
         return true;
       }
      } catch(e) {}
    }
    try {
      oAcro4 = new ActiveXObject('PDF.PdfCtrl.1');
      if(oAcro4)
        return true;
    } catch(e) {}
    try {
      oAcro7 = new ActiveXObject('AcroPDF.PDF.1');
      if(oAcro7)
        return true;
    } catch(e) {}
  }else{
    //chrome和FF、safrai等其他浏览器
    return true;
  }
};

 

posted @ 2020-06-23 15:42  我咯I  阅读(1518)  评论(0编辑  收藏  举报