html5下载属性的任何后备客户端解决方案?

时间:2013-09-06 07:59:11

标签: javascript html5

对于不支持HTML5“下载”属性的浏览器,是否有客户端备用选项?

目前,只有Chrome才能正确支持此功能。 Firefox有支持,但从一个愚蠢的观点来看,它应该只针对“安全”问题来自同一域的文件。

处理此问题的正确方法是让后端服务器使用Content-Disposition标头代理请求的文件,但在这种情况下,它很可能不是一个选项。

Firefox的“安全影院”也不是很有用,因为它是设置代理的任意机制。

我在看https://github.com/dcneiner/Downloadify,但刚刚意识到它只支持文件创建,而不支持远程文件访问。

2 个答案:

答案 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'
    }
}