背景:在xp系统上 ie8浏览器的下载需求,后端返回资源路径.

方法:谷歌下采用aDown下载,ie采用window.open 触发下载,如果不能自动自动下载,采用execCommand("SaveAs")进行文件保存做下载(ps:保存无法在下载列表中查看),当禁用window.open时采用iframe进行下载(ps:此方法注意跨域);

完整代码如下,如发现bug及漏洞,请多交流.

  1. var DownLoad = function (url, name) {
  2. if (!!window.ActiveXObject || "ActiveXObject" in window) {
  3. //ie
  4. var oPow = window.open(url, "", "width = 1, height = 1, top = 5000, left = 5000 ");
  5. var isOpen = true; //判断window.open是否被禁用
  6. try {
  7. if (oPow == null) {
  8. isOpen = false
  9. }
  10. } catch (err) {
  11. isOpen = false
  12. }
  13. if (isOpen) {
  14. //没禁用window.open采用window.open下载
  15. while (oPow.document.readyState !== "complete") {
  16. if (oPow.document.readyState === "complete") break;
  17. }
  18. oPow.document.execCommand("SaveAs", true, name);
  19. oPow.close();
  20. } else {
  21. //禁用了window.open采用iframe下载
  22. var oIrame = document.createElement('iframe');
  23. oIrame.style.width = "0px";
  24. oIrame.style.height = "0px";
  25. oIrame.style.opacity = ;
  26. document.body.appendChild(oIrame)
  27. oIrame.src = url;
  28. var IfDoc = oIrame.contentDocument || oIrame.document;
  29. oIrame.onreadystatechange = function () { // IE下的节点都有onreadystatechange这个事件
  30. if (oIrame.readyState == "complete") {
  31. // oIrame.execCommand("SaveAs", true, name)
  32. document.body.removeChild(oIrame)
  33. }
  34. };
  35.  
  36. }
  37.  
  38. } else {
  39. if (typeof url == 'object' && url instanceof Blob) {
  40. url = URL.createObjectURL(url); // 创建blob地址
  41. }
  42. var aLink = document.createElement('a');
  43. aLink.href = url;
  44. aLink.download = name || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
  45. var event;
  46. if (window.MouseEvent) {
  47. event = new MouseEvent('click');
  48. } else {
  49. if (document.createEvent) {
  50. event = document.createEvent('MouseEvents');
  51. event.initMouseEvent('click', true, false, window, , , , , , false, false, false, false, , null);
  52. }
  53. }
  54. aLink.dispatchEvent(event);
  55. }
  56.  
  57. }

兼容ie8的前端下载方法的更多相关文章

  1. 网站制作---eWebeditor不兼容IE8问题的解决方法

    qq交流群:创梦技术交流群:251572072                         创梦网络赚钱群:248318056                         创梦娱乐休闲群:22 ...

  2. Extjs 兼容IE8常见问题及解决方法

    1. 在IE8中整个页面都打不开,一般情况是: 页面组件中最后一个属性出现了逗号 没有多余的逗号,就很有可能是组件中没有设置renderTo:Ext.getBody(); 2. 页面按钮颜色失效 自定 ...

  3. 前端页面兼容ie8解决方法

    一.通用兼容文件的引用: 1.HTML5标签兼容方案:html5shiv.js GitHub地址:https://github.com/aFarkas/html5shiv/ IE8不支持HTML5的新 ...

  4. placeholder兼容方法(兼容IE8以上浏览器)

    //placeholder兼容方法(兼容IE8以上浏览器) var JPlaceHolder = { //检测 _check: function () { return 'placeholder' i ...

  5. a标签前端下载火狐兼容和笔记

    1.a标签实现前端下载的谷歌兼容 我们都知道,文件下载的一种实现方案就是后端返回文件流,然后前端进行生成a标签并触发点击来下载.但是在火狐浏览器的时候,需要注意一些兼容性问题.原因是火狐的同源策略.官 ...

  6. 前端下载图片的N种方法

    前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...

  7. 一个小方法解决RGBA不兼容IE8

    原网页http://blog.csdn.net/leihope_/article/details/70158902 要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如 ...

  8. bootstrap3 兼容IE8浏览器

    近期在使用bootstrap这个优秀的前端框架,这个框架非常强大,框架里面有下拉菜单.按钮组.按钮下拉菜单.导航.导航条.面包屑.分页.排版.缩略图.警告对话框.进度条.媒体对象等,bootstrap ...

  9. Bootstrap 3 兼容 IE8 浏览器

    公司新上的项目,前端用的Bootstrap3的框架,但它已经放弃对IE9下的支持了.可IE8还是有着许多用户,不能不照顾到他们,IE7以下的,我只想说,现在什么年代了,要解放思想,与时俱进啊,就不能动 ...

随机推荐

  1. plsql导入.dmp, .sql步骤

    plsql导入.sql和.dmp文件时,会经常用到,对于初学者来说可能没有那么简单,毕竟oracle数据库比较麻烦. 下面是我自己导入.sql和.dmp文件的步骤. 1.导入.sql文件(sql文件是 ...

  2. 3.2.1 SpringMVC入门

    一. SpringMVC入门 1. MVC介绍 MVC全名 是Model View Controller, 是模型(model) - 视图(view) - 控制器(controller) 的缩写, 它 ...

  3. 【Git】修改git远程连接ip

  4. git提交代码时,Unstaged changes如何过滤.class .log等文件

    在项目下创建一个.gitignore文件,内容如下: 可以在文件目录中加入这个文件,也可以在eclipse中项目下加入此文件 /target/表示忽略target文件夹下的内容 .class 表示忽略 ...

  5. JAVA获取汉字拼音首字母

    package com.common.util; import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Titl ...

  6. Oracle 10g RAC OCR、Voting disk更换

    环境:OEL 5.7 + Oracle 10.2.0.5 RAC 需求:更换存储,OCR.Voting disk同时需要更换到新存储. 1.替换OCR 2.替换voting disk 1.替换OCR ...

  7. FB面经prepare: Count the number of Vector

    给一个超级大的排好序的vector [abbcccdddeeee]比如,要求返回[{,a}, {,b}, {,c}, {,d}, {,e}......]复杂度要优于O(N) 分析: 如果是binary ...

  8. python数据类型值数字类型

    1.bin()函数是将十进制数转换成二进制数 2.oct()函数将十进制数转换成八进制数 3.hex()函数将十进制数转换成十六进制     数 十六进制表示:0-9 a b c d e f 4.数字 ...

  9. GALV_maptravel研究分析(2)

    本节地图:Gov's Mansion,Campsite,Yourmansion ++++++++++++++++++++华丽丽的分割线+++++++++++++++++++++++++++++++++ ...

  10. go basic

    go time and rand: package main import ( "fmt" "math/rand" "time" ) fun ...