Data URI doesn't work with IE

2019-01-20 11:51发布

问题:

Im trying to dynamically create a CSV file using javascript that the user can download. This only has to work in IE.

The html the javascript generates looks something like this

 <a href="data:application/octet-stream,field1%2Cfield2%0Afoo%2Cbar%0Agoo%2Cgai%0A">CSV</a>

Which seams to work fine in chrome but IE10 just breaks.

Is there a better way to dynamically create a file using JavaScript and then give the user a link to download it? I cant use PHP as the entire system needs to run on the client-side due to restrictions placed by the user. The system all needs to work on a touch screen (with no right click option) so the link needs to give the user the ability to download, not open the file.

回答1:

Internet Explorer 10 doesn't support the data protocol on the a element. Per the documentation, the only supported elements/attributes are the following:

  • object (images only)
  • img
  • input type=image
  • link
  • CSS declarations that accept a URL, such as background, backgroundImage, and so on.

You should know that what you're attempting to do smells like a phishing attempt; for this reason you shouldn't expect browsers to support this pattern. You can read more about data-uri phishing in the paper Phishing by data URI.



回答2:

I had the same problem, I download the data uri in this way with Chrome:

var link = document.createElement("a");
link.download = dataItem.Filename;
link.href = data;
link.click();

But it does not work in Internet Explorer. I have found a library that works in Internet Explorer, https://github.com/rndme/download

The only issue for me is the dowload of files with longer MIME type like odt, docx, etc. For all the other kind of files it look great!