Blob createObjectURL Télécharger ne fonctionne pas dans Firefox (mais fonctionne lors du débogage)

j'ai un problème étrange, la fonction ci-dessous est celui que j'ai créé basé sur ce que j'ai trouvé sur le net sur la création d'une tache dans le client à la volée avec quelques données binaires dans (passé comme un tableau) et être en mesure de télécharger cela. Cela fonctionne brillamment dans Chrome, mais ne fait rien dans Firefox - à moins que je débogue et pas à travers le code. Oui, curieusement, si je crée un point de rupture à l'intérieur de la fonction et que je la franchis, le A. cliquez sur () pour afficher la fenêtre de téléchargement!

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

quelqu'un Peut-il m'aider? Cela a été testé en utilisant Firefox 38.0.5.

39
demandé sur Johncl 2015-06-07 17:07:08

3 réponses

Vous êtes sans doute la suppression de la ressource trop vite, essayez de le retarder

    ...
    a.click();
    setTimeout(function(){
        document.body.removeChild(a);
        window.URL.revokeObjectURL(url);  
    }, 100);  
}
66
répondu Musa 2015-06-08 12:09:58

ce qui précède n'a pas résolu le problème pour moi. Mais celui-ci fait à la place:

Programmatique cliquez sur -balise ne fonctionne pas sous Firefox

C'était un problème avec l'événement de déclenchement du clic, pas une suppression prématurée de la ressource.

3
répondu Tomek 2018-06-07 13:37:21

cette solution fonctionne pour moi dans bot chrome et firefox pour l'élément d'ancrage existant pour télécharger le fichier binaire

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);
1
répondu azad 2017-03-15 06:31:54