Javascript - 生成一个包含href和下载atrributes的锚点

时间:2017-01-03 07:05:18

标签: javascript download anchor href

我试图动态生成给定内容的锚点(在这种情况下,存储在Cloudinary.io上的文档和/或图像),但我存储的文档具有哈希值而不是文件名(即:c9eed62bd1534c382a3b89241b24b1ddd17b3793代替sample.pdf)。

这是我用来生成锚点的功能:

function download(url, download) {
    if (url) {
        var a = document.createElement('a');

        if (a) {
            a.href = url;
            a.download = download || '';
            a.target = '_blank';
            a.click();
        }
    }
}

我遇到的问题是,当我执行该功能时,浏览器会为我下载该文件,但名称在href属性而不是download属性中。

这是我用来触发下载的事件:

$('.link').on('click', function (e) {
    download($(this).data('url'), $(this).data('name'));
});

这是一个示例HTML元素,包含触发事件的数据:

<span class="link" data-url="http://res.cloudinary.com/dxsky7h00/raw/upload/v1483364241/627ec3e4afa08749ac4aff8d2917a38f586a5790" data-name="fs545554545454.xls"><i class="icon-file-o"></i>fs545554545454</span>

也许我以错误的方式理解download元素的<a>属性,但我认为,当指定时,它会强制浏览器下载资源而不是一方面尝试打开它另一方面,如果使用download="something",则会下载资源,其名称为&#39; something&#39;而不是href属性中的内容。

这个示例函数有什么用?

编辑我目前正在Chrome 55.0.2883.87(64位)上对此进行测试,但正如this entry on caniuse.com所述,它是兼容的

1 个答案:

答案 0 :(得分:0)

@tsh问了正确的问题。问题在于href属性引用了外部资源,因此我们正在处理跨源引用,浏览器不允许我使用其他名称下载它。

我用本地文件测试它并且它有效,所以问题在于我的实现。无论如何,感谢所有人:)