Blob createObjectURL下载在Firefox中不工作(但在调试时工作)

Blob createObjectURL download not working in Firefox (but works when debugging)

本文关键字:工作 调试 createObjectURL 下载 Firefox Blob      更新时间:2023-09-26

我有一个奇怪的问题,下面的函数是我根据我在网上发现的关于在客户端创建一个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进行了测试。

您可能删除资源太快了,请尝试延迟删除

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

以上并没有解决我的问题。但这一个却做到了:
程序化的点击-标签在Firefox中不起作用
这是触发点击事件的问题,而不是过早删除资源的问题。

这个解决方案适用于我在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);