from - new blob() javascript
la descarga de blob no funciona en IE (7)
¿Cuál es su versión de navegador IE? Necesita un navegador moderno o IE10 + http://caniuse.com/bloburls
Tengo esto en mi controlador angular js que descarga un archivo csv:
var blob = new Blob([csvContent.join('''')], { type: ''text/csv;charset=utf-8'' });
var link = document.createElementNS(''http://www.w3.org/1999/xhtml'', ''a'');
link.href = URL.createObjectURL(blob);
link.download = ''teams.csv'';
link.click();
Esto funciona perfectamente en Chrome, pero no en IE. Un registro de la consola del navegador dice:
HTML7007: One or more blob URLs were revoked by closing the blob for which
they were created. These URLs will no longer resolve as the data backing the
URL has been freed.
¿Qué significa y cómo puedo solucionarlo?
IE no te permitirá abrir blobs directamente. Tienes que usar msSaveOrOpenBlob
. También hay msSaveBlob
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else {
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
}
Intente usar esto en su lugar: var blob = file.slice (0, file.size);
Necesitaba que la función de descarga funcionara en Chrome e IE11. Tuve un buen éxito con este código.
HTML
<div ng-repeat="attachment in attachments">
<a ng-click="openAttachment(attachment)" ng-href="{{attachment.fileRef}}">{{attachment.filename}}</a>
</div>
JS
$scope.openAttachment = function (attachment) {
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(
b64toBlob(attachment.attachment, attachment.mimeType),
attachment.filename
);
}
};
Necesitaba usar un Blob para descargar una imagen PNG base64 convertida. Pude descargar con éxito el blob en IE11 con window.navigator.msSaveBlob
Consulte el siguiente enlace msdn: http://msdn.microsoft.com/en-us/library/hh779016(v=vs.85).aspx
Específicamente, debe llamar:
window.navigator.msSaveBlob(blobObject, ''msSaveBlob_testFile.txt'');
donde blobObject
es un Blob creado de la manera habitual.
Pruebe esto usando this
o useragent
if (navigator.appVersion.toString().indexOf(''.NET'') > 0)
window.navigator.msSaveBlob(blob, filename);
else
{
var blob = new Blob([''stringhere''], { type: ''text/csv;charset=utf-8'' });
var link = document.createElementNS(''http://www.w3.org/1999/xhtml'', ''a'');
link.href = URL.createObjectURL(blob);
link.download = ''teams.csv'';
link.click();
}
Quizás necesites un poco de retraso. ¿Qué pasa con:
link.click();
setTimeout(function(){
document.body.createElementNS(''http://www.w3.org/1999/xhtml'', ''a'');
URL.revokeObjectURL(link.href);
}, 100);