下载A标签上的属性不适用于IE

Nip*_*una 44 html anchor internet-explorer

从下面的代码中我创建了一个下载文件的动态锚标记.此代码适用于Chrome,但不适用于IE.我怎样才能使这个工作

<div id="divContainer">
    <h3>Sample title</h3>
</div>
<button onclick="clicker()">Click me</button>

<script type="text/javascript">

    function clicker() {
        var anchorTag = document.createElement('a');
        anchorTag.href = "http://cdn1.dailymirror.lk/media/images/finance.jpg";
        anchorTag.download = "download";
        anchorTag.click();


        var element = document.getElementById('divContainer');
        element.appendChild(anchorTag);
    }

</script>
Run Code Online (Sandbox Code Playgroud)

Eri*_*Law 29

Internet Explorer目前不支持标记Download上的属性A.

http://caniuse.com/downloadhttp://status.modern.ie/excellenceattribute ; 后者表明IE12的功能正在"考虑中".

  • 我在IE中找到了一个解决方法,而不是创建一个`<a>`标签.只需使用这一行...`navigator.msSaveBlob(blob,fileName);`信用[download.js](http://danml.com/download.html)以获取以下行:https:// github. COM/rndme /下载/ BLOB /主/ download.js#L143 (20认同)
  • 那么在IE中设置文件名没有解决方法吗? (4认同)
  • 这不能回答“我如何才能使其正常工作”的问题 (2认同)

ari*_*iro 24

在我的情况下,由于需要支持IE 11(版本11.0.9600.18665)的使用,我最终使用了@Henners提供的解决方案:

// IE10+ : (has Blob, but not a[download] or URL)
if (navigator.msSaveBlob) {
    return navigator.msSaveBlob(blob, fileName);
}
Run Code Online (Sandbox Code Playgroud)

这很简单实用.

显然,这个解决方案是在dandavis创建的Javascript 下载功能上找到的.

  • 我试过这个,得到 blob 未定义。你能解释一下如何定义 blob 以及在其中放入什么。我只有文件的 URL。有没有办法从 URL 将文件加载到 blob 中? (2认同)

Kev*_*vin 12

老问题,但我想我会添加我们的解决方案.这是我在上一个项目中使用的代码.它并不完美,但它在所有浏览器和IE9 +中都通过了QA.

downloadCSV(data,fileName){
  var blob = new Blob([data], {type:  "text/plain;charset=utf-8;"});
  var anchor = angular.element('<a/>');

  if (window.navigator.msSaveBlob) { // IE
    window.navigator.msSaveOrOpenBlob(blob, fileName)
  } else if (navigator.userAgent.search("Firefox") !== -1) { // Firefox
    anchor.css({display: 'none'});
    angular.element(document.body).append(anchor);

    anchor.attr({
      href: 'data:attachment/csv;charset=utf-8,' + encodeURIComponent(data),
      target: '_blank',
      download: fileName
    })[0].click();

    anchor.remove();
  } else { // Chrome
    anchor.attr({
      href: URL.createObjectURL(blob),
      target: '_blank',
      download: fileName
    })[0].click();
  }
}
Run Code Online (Sandbox Code Playgroud)

使用ms特定的API在IE中最适合我们.另请注意,某些浏览器要求锚实际位于DOM中以使下载属性起作用,而Chrome则不需要.此外,我们发现Blob在各种浏览器中的工作方式存在一些不一致之处.某些浏览器也有出口限制.这允许每个浏览器中最大可能的CSV导出.


小智 5

从版本10547+开始,Microsoft Edge浏览器现在支持标签download上的属性a.

<a href="download/image.png" download="file_name.png">Download Image</a>

Edge功能更新:https://dev.windows.com/en-us/microsoft-edge/platform/changelog/desktop/10547/

[下载]标准:http://www.w3.org/html/wg/drafts/html/master/links.html#attr-hyperlink-download