Javascript 下载属性在Firefox中不起作用
我试图让用户使用Javascript和HTML5下载属性()将一些数据下载为CSV(文本)文件 数据在数组中形成,然后添加到新的Blob对象中 它可以在Chrome和Opera中完美运行,但在Firefox中根本不起作用 我试图复制的原始示例: 小提琴: Javascript: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",
$('#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);