Загрузка BLOB-объекта createObjectURL не работает в Firefox (но работает при отладке)
У меня странная проблема, ниже описана функция, которую я создал на основе того, что я нашел в сети о создании BLOB-объекта в клиенте на лету с некоторыми двоичными данными (передаваемыми в виде массива) и возможностью их загрузки. Это прекрасно работает в Chrome, но ничего не делает в Firefox - ЕСЛИ Я отлаживаю и прохожу код. Да, как ни странно, если я создаю точку останова внутри функции и выполняю ее, a.click() вызовет окно загрузки!
function downloadFile(filename, data) {
var a = document.createElement('a');
a.style = "display: none";
var blob = new Blob(data, {type: "application/octet-stream"});
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}
Может кто-нибудь мне помочь? Это было проверено с использованием Firefox 38.0.5.
3 ответа
Вы, вероятно, удаляете ресурс слишком рано, попробуйте отложить его
...
a.click();
setTimeout(function(){
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 100);
}
Вышесказанное не решило проблему для меня. Но этот сделал вместо этого:
Программный клик по тегу не работает в Firefox
Это была проблема с инициирующим событием клика, а не преждевременным удалением ресурса.
Это решение работает для меня в бот Chrome и Firefox для существующего элемента привязки для загрузки двоичного файла
window.URL = window.URL || window.webkitURL;
var blob = new Blob([new Uint8Array(binStream)], {type: "octet/stream"});
var link = document.getElementById("link");
link.href = window.URL.createObjectURL(blob);