浏览器实现pdf下载、ms http下载、IE不兼容

pdf下载

后台返回MemoryStream流到JS,JS接收流触发浏览器下载。

步骤:

  1. 设置Response.ContentType = “application/octet-stream”;
  2. ajax下载 仅支持xml、json、script、html
  3. xhr下载,doc、pdf等大文件类型用blob
var blob = this.response;
var a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = fileName;
a.click();
文件预览
window.open(url);
IE浏览器不兼容
if (window.ActiveXObject || "ActiveXObject" in window) {//判断是否为IE浏览器,"ActiveXObject" in window判断是否为IE11//判断是否安装了adobe Readerfor (x = 2; x < 10; x++) {try {oAcro = eval("new ActiveXObject('PDF.PdfCtrl." + x + "');");if (oAcro) {flag = true;}} catch (e) {flag = false;}}try {oAcro4 = new ActiveXObject('PDF.PdfCtrl.1');if (oAcro4) {flag = true;}} catch (e) {flag = false;}try {oAcro7 = new ActiveXObject('AcroPDF.PDF.1');if (oAcro7) {flag = true;}} catch (e) {flag = false;}if (flag) {//支持window.open(previewUrl, '_blank'); //打开地址pdf预览} else {//不支持//$("#pdfContent").append("对不起,您还没有安装PDF阅读器软件呢,为了方便预览PDF文档,请选择安装!");alert("对不起,您还没有安装PDF阅读器软件呢,为了方便预览PDF文档,请选择安装!");location = "http://ardownload.adobe.com/pub/adobe/reader/win/9.x/9.3/chs/AdbeRdr930_zh_CN.exe";}} else {window.open(previewUrl,'_blank');  }
ajax触发 下载
var url = '/XXX/XX';var fileName = "XXX.pdf";var xhr = model.XHR();xhr.open('post', url);xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')  //加密url中的字符串 post必须设置headerxhr.responseType = "blob";  //读取后台response流存储为blob链接xhr.onload = function () {if (this.status == 200 || this.readyState == 4) { //可以只判断statuse  若为onreadystatechange 需要先判断readystate 再status//获取响应流var blob = this.response; //IE9-取不到responseif ('msSaveOrOpenBlob' in navigator) {//处理IE生成的blob链接 支持IE10+window.navigator.msSaveOrOpenBlob(blob, fileName); // 或window.navigator.msSaveBlob(blob,fileName); 判断浏览器是否支持} else {//处理非IE的 blob链接var a = document.createElement('a'); // 最好在html中预先创建a标签,设置hidden, a =document.getElementById()a.href = window.URL.createObjectURL(blob);a.download = fileName; // 必须有download属性实现下载 否则为打开链接a.click();}layer.closeAll();} else {model.popError("下载失败:" + this.status);layer.closeAll();}};xhr.send('filePath=' + res.Data); //发送ajax请求
注意:
  • 判断a标签是否支持download属性

    var isSupportDownload = 'download' in document.createElement('a');
    

​ 目前仅支持firefox、chrome、microsoft edge

  • 判断浏览器是否支持msSaveOrOpenBlob、msSaveBlob:

    window.navigator.msSaveOrOpenBlob //是否为 undefined -- IE9-不支持
    window.navigator.msSaveBlob // 是否为 undefined -- IE9-不支持
    
  • 判断浏览器是否支持blob:

    new Blob()  == undefined  //IE9-不支持
    
  • ie浏览器不兼容$.post 改用原始 $.ajax

附:

原生xhr初始化格式:

var xhr = null;if (window.XMLHttpRequest) {//判断当前浏览器是否支持XMLHttpRequestxhr = new XMLHttpRequest();} else if (window.ActiveXObject) {//判断当前浏览器是否支持ActiveXObject,这是对于IE浏览器的判断try {xhr = new ActiveXObject("Msxml2.XMLHTTP");//IE6及以后的版本支持的} catch (e) {try {xhr = new ActiveXObject('Microsoft.XMLHTTP');//IE6以下版本的支持} catch (e) {return xhr;}}}return xhr;

浏览器兼容设置:

IE浏览器兼容强力总结!!请看

https://blog.csdn.net/xiaoxiaohui520134/article/details/52352922

这样写可以达到的效果是如果安装了GCF(Google Chrome Frame 谷歌内嵌浏览器框架的简称),则使用GCF来渲染页面,如果没安装GCF,则使用最高版本的IE内核进行渲染。这个插件可以让用户的IE浏览器外不变,但 用户在浏览网页时,实际上使用的是Google Chrome浏览器内核,而且支持IE6、7、8等多个版本的IE浏览器。

浏览器实现pdf下载、ms http下载、IE不兼容相关推荐

  1. php pdf只能查看不能下载,对于pdf文件不支持浏览器下载如何处理?

    最近在工作中遇到这样一个问题,就是知道pdf文件的下载地址,但是所有浏览器对于pdf文件都是在浏览器中打开,不支持下载,需要用户下载下来.于是就做了一个html页面,把下载地址设为downpdf.ph ...

  2. 浏览器打开pdf,禁止下载打印

    之前在网站上打开pdf文件,都是用浏览器查看pdf时自带的功能,可以下载打印,最近要求打开pdf后仅供用户预览,禁止下载打印.网上查了一下,发现有很多前辈都遇到过,解决方法是用pdf.js. 1.下载 ...

  3. PDF 预览和下载你是怎么实现的?

    在开发过程中要求对 PDF 类型的发票提供 预览 和 下载 功能,**PDF** 类型文件的来源又包括 H5 移动端 和 **PC 端**,而针对这两个不同端的处理会有些许不同,下文会有所提及. 针对 ...

  4. Python爬虫实战- 爬取整个网站112G-8000本pdf epub格式电子书下载

    (整个代码附在最后) 目录: 爬虫准备 - 某电子书网站内容架构分析 爬虫前奏 - 网站Html代码分析,如何获取需要的链接? 爬虫高潮 - 测试是否有反爬虫措施,测试是否能正常下载一个sample ...

  5. 移动端和PC端的pdf预览与下载

    34.移动端和PC端的pdf的预览与下载 1.预览 需求:在手机端实现pdf的文件与下载,主要是zlb_app中 实现过程:在研究了vue-pdf.pdfjs.pdfh5之后,选择了vue-pdf-s ...

  6. pdf 无须浏览直接下载

    最近页面有下载pdf需求,之前a标签有自带的图片下载,但是pdf浏览器默认会自动浏览打开,介绍一下此方法浏览器无须打开其他页面进行下载文件 浏览器 pdf 无须浏览直接下载 支持多种文件下载 down ...

  7. 全新万能PDF转换器官方免费下载

    导读:怎样将PDF文件资料转换成常用的Word格式是不少用户关心的话题,尤其对于从事文字编辑的上班族来说,在处理PDF文件格式转换的时候,经常发现大部分的专业资料都采用了PDF文件格式.而PDF文件格 ...

  8. PDF下载与批量下载处理

    需求:下载合同,且支持批量下载 思路: 1.点击下载时,发送请求,携带合同的id 2.根据id,获取合同对象,根据对象获取合同文件在服务器上的路径 3.通过IO进行下载 1.单个下载 发送请求,传一个 ...

  9. Java动态处理PDF合同模板并下载

    前期准备步骤: 1.准备一份Word版的电子合同模板 2.通过wps输出为PDF 3.安装Adobe Acrobat DC 4.通过Adobe Acrobat DC打开PDF版电子合同并选择" ...

最新文章

  1. 150名打工人被AI判定效率低遭开除,“属实是人工智能,能治工人“
  2. .Net4.0并行库介绍——Cancellation Framework
  3. where is Angular parts filled
  4. 福建地震局网站被******挂壮阳广告
  5. 7. 开启 mysql remote access
  6. ssh公钥的生成、查看以及config的配置
  7. P、NP、NPC和NP-Hard相关概念的图形和解释
  8. 研究生学历,毕业就给房!给户口!
  9. 视频怎么加水印?这里有你想要的答案
  10. 疫情下技术人的宅家指南
  11. java8的stream写法实现去重
  12. C语言程序设计精髓 第14周——结构设计的艺术 练兵区——编程题
  13. 【机器人学】牛顿-欧拉动力学方程迭代形式
  14. Linux下Chelsio T5调试方法
  15. 五最好的应聘者可以问问题
  16. HTML5+CSS3小实例:黏性小球loading动画
  17. Java类的加载及父类子类加载顺序
  18. CAD软件中文本如何屏蔽
  19. 液晶面板里面有些什么配件_一张图看懂液晶面板内部结构,竟如此复杂
  20. 【BLE】蓝牙抓包器 Ellisys 使用说明

热门文章

  1. 分析师意外下调评级为中性,苹果财报能否改变科技股走向?
  2. PAT-B 1036. 跟奥巴马一起编程(15)(15 分) 画方型字符
  3. 在有滚动条的容器中指定(显示)滚动到某一子元素位置
  4. IPv6改造的重要性
  5. 计算单目标跟踪器的平均CLE
  6. 上手评测:华为nova8和nova7Pro哪个好?区别是什么
  7. 注册好ChatGPT帐号了,按照教程很快搞定
  8. 【商业画布】魏朱画布
  9. 以用户需求为核心能玩出什么新花样?魅族 19 主理人计划构建理想机型
  10. 安装算量软件消火栓系统_识别其他设备