文档章节

兼容ie8的前端下载方法

o
 osc_a22drz29
发布于 2019/03/28 11:47
字数 328
阅读 15
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

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

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

var DownLoad = function (url, name) {
      if (!!window.ActiveXObject || "ActiveXObject" in window) {
        //ie
        var oPow = window.open(url, "", "width = 1, height = 1, top = 5000, left = 5000 ");
        var isOpen = true; //判断window.open是否被禁用
        try {
          if (oPow == null) {
            isOpen = false
          }
        } catch (err) {
          isOpen = false
        }
        if (isOpen) {
          //没禁用window.open采用window.open下载
          while (oPow.document.readyState !== "complete") {
            if (oPow.document.readyState === "complete") break;
          }
          oPow.document.execCommand("SaveAs", true, name);
          oPow.close();
        } else {
          //禁用了window.open采用iframe下载
          var oIrame = document.createElement('iframe');
          oIrame.style.width = "0px";
          oIrame.style.height = "0px";
          oIrame.style.opacity = 1;
          document.body.appendChild(oIrame)
          oIrame.src = url;
          var IfDoc = oIrame.contentDocument || oIrame.document;
          oIrame.onreadystatechange = function () { // IE下的节点都有onreadystatechange这个事件  
            if (oIrame.readyState == "complete") {
              // oIrame.execCommand("SaveAs", true, name)
              document.body.removeChild(oIrame)
            }
          };

        }

      } else {
        if (typeof url == 'object' && url instanceof Blob) {
          url = URL.createObjectURL(url); // 创建blob地址
        }
        var aLink = document.createElement('a');
        aLink.href = url;
        aLink.download = name || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
        var event;
        if (window.MouseEvent) {
          event = new MouseEvent('click');
        } else {
          if (document.createEvent) {
            event = document.createEvent('MouseEvents');
            event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
          }
        }
        aLink.dispatchEvent(event);
      }

    }
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Fuck you Ie 使用produces设置返回类型

错误背景: 前端做文件上传采用了jquery.form.js的ajaxSubmit方法,该方法可实现页面无刷新提交form表单以及文件上传。功能开发所用浏览器是谷歌,但是因为要求最低兼容ie8,功能开发完毕后,...

osc_4nr2ziai
2018/12/18
1
0
让人“蛋碎”的ie兼容问题

前段时间的一个项目,要做ie8及以上的兼容,那个做的我真的是蛋疼,菊花紧啊。。。。 当时就想问问微软ie的部门,你们到底想干虾米,这不是要逼死前段工程师吗。。。。 然后去Google上面找了...

i5--lou
2016/03/08
129
2
开发辅助 | 阿里图标库iconfont入门使用

目前大多数的互联网公司,前端开发和UI设计师配合中,针对设计师给图的效果图,前端开发工程师不再像往常一样对于细小图标进行切图,取而代之的是引用阿里图标库(http://iconfont.cn/);简...

osc_b5qcjovn
2018/03/26
1
0
Web前端页面的浏览器兼容性测试心得(三)总结一些IE8兼容问题的解决方案

由于IE8不支持HTML5,而它又是Win7的默认浏览器,我们即使讨厌它,在这几年却也拿它没办法。 最近做了个需要兼容IE8的项目,不可避免地用了HTML5+CSS3,甚至canvas和svg,做兼容工作的时候不...

osc_f4gmzqne
2018/05/02
6
0
jQuery兼容浏览器IE8方法

1.前言   在做前端开发的时候,公司的规范要求面向客户的兼容到IE8,但是在IE8模式下经常会发现各种错误,某某方法未定义、不支持某属性或对象等,使用jQuery的时候,jQuery从2.0开始不兼容...

osc_fbkekcio
2018/02/14
4
0

没有更多内容

加载失败,请刷新页面

加载更多

百度技术沙龙第67期 百度开源专场

本文作者:HelloDeveloper 具体的产品案例,分享百度开源技术最新实践经验。目前这些项目都已经在 github/baidu 上开源。 什么是 PaddlePaddle 深度学习平台? 首先做个简单的介绍,PaddleP...

百度开发者中心
2019/07/23
11
0
Hacker News 简讯 2020-07-10

更新时间: 2020-07-10 01:15 US Supreme Court deems half of Oklahoma a Native American Reservation - (reuters.com) 美国最高法院认为俄克拉荷马州的一半是印第安人保留地 得分:131 | 评...

FalconChen
今天
28
0
OSChina 周五乱弹 —— 求求你吃了我吧,不要再玩弄食物的感情了

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :张喆的单曲《陷阱 》 这首歌已经在网易找不到原唱了,不知道被哪家买了版权。#今日歌曲推荐# 《陷阱 》- 张喆 手机党少年们想听歌...

小小编辑
今天
32
1
清华陈文光教授:AI 超算基准测试的最新探索和实践。

道翰天琼认知智能平台为您揭秘新一代人工智能。 无规矩不成方圆。放在超级计算机的研发领域,没有一个大家普遍接受的算力评测指标,便难以推动超算迅猛发展。 而现在伴随着人工智能的发展,大...

jackli2020
今天
7
0
@RequestMapping, consumes 提交简单有意思的测试

getParm @GetMapping("getParm")public Result getParm(String id){ System.out.println(); return ResultFactory.success(id);} 等同于 == bodyParm @PostMapping("bodyParm......

莫库什勒
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部