what new from example convert b64 javascript internet-explorer angularjs blob compatibility

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