对于不支持HTML5“下载”属性的浏览器,是否有客户端备用选项?
目前,只有Chrome才能正确支持此功能。 Firefox有支持,但从一个愚蠢的观点来看,它应该只针对“安全”问题来自同一域的文件。
处理此问题的正确方法是让后端服务器使用Content-Disposition标头代理请求的文件,但在这种情况下,它很可能不是一个选项。
Firefox的“安全影院”也不是很有用,因为它是设置代理的任意机制。
我在看https://github.com/dcneiner/Downloadify,但刚刚意识到它只支持文件创建,而不支持远程文件访问。
答案 0 :(得分:14)
答案简短:不。除了您已经提到的download
属性之外,没有干净的客户端方法来执行此操作。发送正确的标题是最好的,但是你可能不想使用的黑客攻击:
对于具有download
属性的所有链接(您可以使用document.querySelectorAll('a[download]')
获取),请使用XMLHttpRequest获取HREF中提到的网址/页面/数据。然后,使用btoa()
函数(或IE的polyfill)将其转换为base64字符串。现在将"data:application/octet-stream;base64,"
添加到字符串的开头并将其设置为锚点的新HREF属性,然后删除download
属性。 (您可能希望首先使用Modernizr)来探测浏览器支持。
我告诉过你,你不喜欢它!
答案 1 :(得分:11)
我写了这个JS [attrDownloadIE.js]
concat: {
options: {
stripBanners: false
},
bootstrapJS: {
src: [
'lib/bootstrap/js/transition.js',
'lib/bootstrap/js/alert.js',
'lib/bootstrap/js/button.js',
'lib/bootstrap/js/carousel.js',
'lib/bootstrap/js/collapse.js',
'lib/bootstrap/js/dropdown.js',
'lib/bootstrap/js/modal.js',
'lib/bootstrap/js/tooltip.js',
'lib/bootstrap/js/popover.js',
'lib/bootstrap/js/scrollspy.js',
'lib/bootstrap/js/tab.js',
'lib/bootstrap/js/affix.js'],
dest: 'purgatory/js/bootstrap.js'
},
dataTablesJS: {
src: [
'lib/datatables/js/jquery.dataTables.js',
'lib/datatables/js/dataTables.bootstrap.js'],
dest: 'purgatory/js/dataTables.js'
},
noCompMonolith: {
src: ['lib/jquery.js', '<%= concat.bootstrapJS.dest %>', '<%= concat.dataTablesJS.dest %>'],
dest: 'dev/js/application_monolith.js'
}
}