Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
296 views
in Technique[技术] by (71.8m points)

javascript - Any fallback client-side solutions for the html5 download attribute?

Is there a client-side fallback option for browsers that don't support the HTML5 "download" attribute?

Currently, this is only properly supported in Chrome. Firefox has support, but has taken an obtuse point of view that it should only work on files from the same domain for "security" issues.

The proper way to handle this is to have a backend server that proxies requested files with a Content-Disposition header, but in this case its most likely not an option.

Firefox's "security theater" isn't very helpful either since it is an arbitrary mechanism to setup a proxy.

I was looking at https://github.com/dcneiner/Downloadify but just realized it only supports file creation, not remote file access.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The short answer: no. Besides the download attribute that you already mentioned, there is no clean client-side method to do this. Sending the proper header would be best, but there is a hack that you probably don't want to use:

For all links with the download attribute (you can get those with document.querySelectorAll('a[download]')), use XMLHttpRequest to get the page/data at the URL mentioned in the HREF. Then, use the btoa() function (or a polyfill for IEs) to convert it to a base64 string. Now add "data:application/octet-stream;base64," to the beginning of the string and set this as the anchor's new HREF attribute, then remove the download attribute. (You probably want to probe browser support first, with something like Modernizr).

I told you that you wouldn't like it!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...