我有这个代码来下载一个从json生成的xml文件。我使用一个名为jsonToSsXml()的函数执行此操作。这很好用。但是当我想下载时,并非每次下载都有效。我没有错误消息,我放了一些console.log来查看是否生成了blob并且确实
var download = function(content, filename, contentType) {
if(!contentType) contentType = 'application/octet-stream';
var a = document.getElementById('excel');
var blob = new Blob([content], {'type':contentType});
a.href = window.URL.createObjectURL(blob);
console.log(a.href); //blob:http://mydomain/c72b5368-1fd1-48a1-9b32-858e8d3ab6b5
a.download = filename;
console.log(a.download);//formulario.xls
//window.URL.revokeObjectURL(blob);
};
download(jsonToSsXml(campos), 'formulario.xls', 'application/vnd.ms-excel');
正如我所说,它在某些情况下有效,有些则没有。它对我的内容"不会有问题。值,它是一个简单的xml,它们都是生成好的。我对下载函数的最后一行进行了注释(URL.revokeObjectURL方法),因为我不确定如何使用它以及它是否在这种情况下有所作为。有提示吗?
编辑:在随机情况下(但总是使用相同的文件)我收到404错误,找不到该文件,但blob网址始终是以console.log显示的方式生成的。
答案 0 :(得分:0)
我需要延迟:
setTimeout(function(){
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 100);
从中得到答案:Blob createObjectURL download not working in Firefox (but works when debugging)