Подтвердить что ты не робот

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.

4b9b3361

Ответ 1

Вероятно, вы слишком быстро удалите ресурс, попробуйте отложить его

    ...
    a.click();
    setTimeout(function(){
        document.body.removeChild(a);
        window.URL.revokeObjectURL(url);  
    }, 100);  
}

Ответ 2

это решение работает для меня в bot 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);