Estoy tratando de implementar una funcionalidad para descargar un archivo pdf usando javascript. Mi código no funciona en IE 11. Cualquier pista es muy apreciada. A continuación se muestra el código que estoy usando.
saveByteArray: function(reportName, byte) { var bytes = new Uint8Array(byte); var blob = new Blob([bytes], {type: "application/pdf"}); var link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); var fileName = reportName; link.download = fileName; link.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));}
No necesita un nuevo MouseEvent para un simple clic (donde no especifica manualmente screenX , screenY , etc.).
Simplemente puede usar link.click() que es compatible con IE11: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
Prueba lo siguiente:
var bytes = new Uint8Array(byte); var blob = new Blob([bytes], {type: "application/pdf"}); var link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); var fileName = reportName; link.download = fileName; link.click() (También tenga en cuenta que la propiedad 'descargar' tampoco es compatible con IE11: https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement/download , no tengo IE11 en este momento, pero Creo que simplemente será ignorado)
El constructor MouseEvent ( new MouseEvent() ) no es compatible con IE 11 .
Hay varios polyfills en el mundo, como este de los documentos de Mozilla, pero generalmente me resulta más fácil y completo usar algo como Babel para generar y usar automáticamente ese tipo de polyfill sin tener que buscarlos y definirlos explícitamente para todas y cada una de las cosas que IE no admite (lo cual es mucho).
La solución sería, en lugar de usar el evento del mouse, usar la función msSaveOrOpenBlob para esta funcionalidad. Así que el código de trabajo final será el siguiente
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer { var bytes = new Uint8Array(byte); var blob = new Blob([bytes], {type: "application/pdf"}); window.navigator.msSaveOrOpenBlob(blob, reportName+".pdf"); } else { var bytes = new Uint8Array(byte); var blob = new Blob([bytes], {type: "application/pdf"}); var link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); var fileName = reportName; link.download = fileName; link.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window})); }