万恶之源的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; } };