Blob createObjectURL下载在Firefox中不起作用(但在调试时有效)

Joh*_*ncl 57 javascript firefox blob download

我有一个奇怪的问题,下面的函数是我创建的基于我在网上发现的关于在客户端动态创建一个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);    
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我?这是使用Firefox 38.0.5测试的.

Mus*_*usa 83

您可能过早删除了资源,请尝试延迟它

    ...
    a.click();
    setTimeout(function(){
        document.body.removeChild(a);
        window.URL.revokeObjectURL(url);  
    }, 100);  
}
Run Code Online (Sandbox Code Playgroud)

  • 只是想要注意,延迟"0"与我能说的一样好用 - Firefox只需要一个提示,无论你做什么都可以到调用堆栈的末尾,实际的持续时间似乎是无关紧要的. (4认同)

Tom*_*ek 11

以上并没有为我解决问题.但是这个改为:
编程点击<a> -tag在Firefox中不起作用
这是触发点击事件的问题,而不是过早删除资源.