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