Javascript 下载属性在Firefox中不起作用

Javascript 下载属性在Firefox中不起作用,javascript,jquery,html,firefox,Javascript,Jquery,Html,Firefox,我试图让用户使用Javascript和HTML5下载属性()将一些数据下载为CSV(文本)文件 数据在数组中形成,然后添加到新的Blob对象中 它可以在Chrome和Opera中完美运行,但在Firefox中根本不起作用 我试图复制的原始示例: 小提琴: Javascript: $('#downloadButton').click(function () { // some data to export var data = [{ "title": "Book title 1",

我试图让用户使用Javascript和HTML5下载属性()将一些数据下载为CSV(文本)文件

数据在数组中形成,然后添加到新的Blob对象中

它可以在Chrome和Opera中完美运行,但在Firefox中根本不起作用

我试图复制的原始示例:

小提琴:

Javascript:

$('#downloadButton').click(function () {
// some data to export
var data = [{
    "title": "Book title 1",
    "author": "Name1 Surname1"
}, {
    "title": "Book title 2",
    "author": "Name2 Surname2"
}, {
    "title": "Book title 3",
    "author": "Name3 Surname3"
}, {
    "title": "Book title 4",
    "author": "Name4 Surname4"
}];

// prepare CSV data
var csvData = new Array();
csvData.push('"Book title","Author"');
data.forEach(function (item, index, array) {
    csvData.push('"' + item.title + '","' + item.author + '"');
});

// download stuff
var fileName = "data.csv";
var buffer = csvData.join("\n");
var blob = new Blob([buffer], {
    "type": "text/csv;charset=utf8;"
});
var link = document.createElement("a");

if (link.download !== undefined) { // feature detection
    // Browsers that support HTML5 download attribute
    link.setAttribute("href", window.URL.createObjectURL(blob));
    link.setAttribute("download", fileName);
    link.click();
} else {
    alert('CSV export only works in Chrome, Firefox, and Opera.');
}
});
HTML:

我在Firefox中得到这个结果:

…这将导致Chrome/Opera:


因此,它似乎出于某种原因忽略了Firefox中的URL路径。

您可以在触发单击之前尝试将元素添加到DOM中:

document.body.appendChild(link);
link.click();
document.body.removeChild(link);
这在Firefox34中对我起了作用


jsfiddle:

是的!这似乎可以解决问题。非常感谢。谢谢你。这是如何获取在Firefox中工作的'a'元素的'link'属性。非常有帮助!谢谢你,救了我一天。这对FF很有用,但是坏了。。。它使我的浏览器进入/true。可能需要调整此设置以检查IEi,我不需要在Chrome上调用appendChild、removeChild,但在Firefox上这是必要的,关于mpeg和可能的其他文件,如果Firefox播放器打开,这是因为您需要在
about:config
中设置
媒体。独立播放
=
false
。它可能是windows上的
media.windows media foundation.enabled
alert(window.URL.createObjectURL(blob));
document.body.appendChild(link);
link.click();
document.body.removeChild(link);