webentwicklung-frage-antwort-db.com.de

Blob createObjectURL-Download funktioniert nicht in Firefox (funktioniert aber beim Debuggen)

Ich habe ein seltsames Problem, die folgende Funktion habe ich basierend auf dem erstellt, was ich im Internet über das Erstellen eines Blobs im Client im laufenden Betrieb mit einigen Binärdaten in (als Array übergeben) gefunden habe und in der Lage bin, diese herunterzuladen. Dies funktioniert hervorragend in Chrome, macht aber in Firefox nichts - es sei denn, ich debugge und gehe den Code durch. Ja, seltsamerweise, wenn ich in der Funktion einen Haltepunkt erstelle und durch ihn gehe, wird mit a.click () das Download-Fenster geöffnet!

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);    
}

Kann mir jemand helfen? Dies wurde mit Firefox 38.0.5 getestet.

52
Johncl

Sie entfernen die Ressource wahrscheinlich zu früh. Versuchen Sie, sie zu verzögern

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

Das oben Genannte hat das Problem für mich nicht gelöst. Aber dieser tat stattdessen:
Programmatischer Klick auf <a> -Tag funktioniert nicht in Firefox
Es war ein Problem mit dem auslösenden Klickereignis, nicht das vorzeitige Entfernen der Ressource.

10
Tomek

diese lösung funktioniert bei mir in bot chrome und firefox für vorhandenes ankerelement zum herunterladen der binärdatei

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);
2
azad