window.print () no funciona en IE

Estoy haciendo algo como esto en javascript para imprimir una sección de mi página onclick en un enlace

function printDiv() { var divToPrint = document.getElementById('printArea'); var newWin = window.open(); newWin.document.write(divToPrint.innerHTML); newWin.print(); newWin.close(); } 

Funciona muy bien en Firefox pero no en IE.

¿Podría alguien ayudarme?

Agregue estas líneas después de newWin.document.write(divToPrint.innerHTML)

 newWin.document.close(); newWin.focus(); newWin.print(); newWin.close(); 

Entonces la function de printing funcionará en todos los browseres …

 function printDiv() { var divToPrint = document.getElementById('printArea'); newWin= window.open(); newWin.document.write(divToPrint.innerHTML); newWin.location.reload(); newWin.focus(); newWin.print(); newWin.close(); } 

Agregar newWin.document.close (); , al igual que:

 function printDiv() { var divToPrint = document.getElementById('printArea'); var newWin = window.open(); newWin.document.write(divToPrint.innerHTML); newWin.document.close(); newWin.print(); newWin.close(); } 

Esto hace feliz a IE. HTH, -Ted

No estoy seguro pero creo que ocurre debido a las reglas de security de InternetExplorer …

Si llama a una function como print () le pregunta al usuario de forma manual si desea permitir la creación de secuencias de commands activas, si hace clic en la barra amarilla y selecciona 'Sí', aparece el cuadro de dialog de printing. Si hace clic en "No" o simplemente no hace nada, no está ejecutando las partes que se consideran secuencias de commands activas u otras funciones de security relevantes para JavaScript.

En su ejemplo, se abre la window, luego se llama a print (), aparece la barra de confirmación (no se selecciona nada, de hecho, no se puede seleccionar nada debido al poco time), se invoca newWin.close (), se cierra la window.

Debería intentar agregar la página a los sitios confiables en InternetExplorer o cambiar la configuration de security.

Puede haber una forma de manejar las políticas de security en el javascript, pero no sé mucho sobre las políticas de security de InternetExplorer.

Espero que esto ayude

He tenido este problema antes, y la solución es simplemente llamar a window.print () en IE, en lugar de llamar a imprimir desde la instancia de la window:

 function printPage(htmlPage) { var w = window.open("about:blank"); w.document.write(htmlPage); if (navigator.appName == 'Microsoft Internet Explorer') window.print(); else w.print(); } 

¡Solo espera un time antes de cerrar la window!

 if (navigator.appName != 'Microsoft Internet Explorer') { newWin.close(); } else { window.setTimeout(function() {newWin.close()}, 3000); } 

Me dijeron que hiciera document.close after document.write, no veo cómo ni por qué, pero esto hizo que mi script esperara hasta que cerré el cuadro de dialog de printing antes de ejecutar mi window.close.

 var printContent = document.getElementbyId('wrapper').innerHTML; var disp_setting="toolbar=no,location=no,directories=no,menubar=no, scrollbars=no,width=600, height=825, left=100, top=25" var printWindow = window.open("","",disp_setting); printWindow.document.write(printContent); printWindow.document.close(); printWindow.focus(); printWindow.print(); printWindow.close(); 

agregar condición de comprobación para la carga

 if (newWinObj.onload) { newWinObj.onload = function() { newWinObj.print(); newWinObj.close(); }; } else { newWinObj.print(); newWinObj.close(); } 

La forma en que manejamos la printing es simplemente abrir la nueva window con todo lo que debe enviarse a la impresora. Luego, el usuario realmente hace clic en el button Imprimir de su browser.

Esto siempre ha sido aceptable en el pasado, y elude las restricciones de security de las que habla Chilln.

Cierre la window solo cuando no sea IE:

 function printDiv() { var divToPrint = document.getElementById('printArea'); var newWin= window.open(); newWin.document.write(divToPrint.innerHTML); newWin.print(); if (navigator.appName != 'Microsoft Internet Explorer') newWin.window.close(); } 

También estoy enfrentando este problema.

El problema en IE es newWin.document.write (divToPrint.innerHTML);

cuando eliminamos esta function de printing de línea en IE está funcionando. pero nuevamente existe un problema sobre el contenido de la página.

Puede abrir la página usando window.open, y escribir el contenido en esa página. luego la function de printing funcionará en IE. Esta es una solución alternativa.

La mejor de las suertes.

@Pratik

Esto funcionó para mí, funciona en firefox, es decir, en cromo.

  var content = "This is a test Message"; var contentHtml = [ '<div><b>', 'TestReport', '<button style="float:right; margin-right:10px;"', 'id="printButton" onclick="printDocument()">Print</button></div>', content ].join(''); var printWindow = window.open(); printWindow.document.write('<!DOCTYPE HTML><html><head<title>Reports</title>', '<script>function printDocument() {', 'window.focus();', 'window.print();', 'window.close();', '}', '</script>'); printWindow.document.write("stylesheet link here"); printWindow.document.write('</head><body>'); printWindow.document.write(contentHtml); printWindow.document.write('</body>'); printWindow.document.write('</html>'); printWindow.document.close(); 

Para el uso de Firefox

 iframewin.print() 

para el uso de IE

 iframedocument.execCommand('print', false, null); 

ver también Imposible imprimir un iframe en IE usando JavaScript, imprime la página principal en su lugar

 function functionname() { var divToPrint = document.getElementById('divid'); newWin= window.open(); newWin.document.write(divToPrint.innerHTML); newWin.location.reload(); newWin.focus(); newWin.print(); newWin.close(); } 

Solo para agregar algo de información adicional. En IE 11, usando meramente

 window.open() 

causas

 window.document 

ser indefinido Para resolver esto, usa

 window.open( null, '_blank' ) 

Esto también funcionará correctamente en Chrome, Firefox y Safari.

No tengo suficiente reputación para comentar, así que tuve que crear una respuesta.

 <!DOCTYPE html> <html> <head id="head"> <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" /> <!-- saved from url=(0023)http://www.contoso.com/ --> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div> <div> Do not print </div> <div id="printable" style="background-color: pink"> Print this div </div> <button onClick="printdiv();">Print Div</button> </div> </body> <script> function printdiv() { var printContents = document.getElementById("printable").innerHTML; var head = document.getElementById("head").innerHTML; //var popupWin = window.open('', '_blank'); var popupWin = window.open('print.html', 'blank'); popupWin.document.open(); popupWin.document.write(''+ '<html>'+'<head>'+head+'</head>'+'<body onload="window.print()">' + '<div id="printable">' + printContents + '</div>'+'</body>'+'</html>'); popupWin.document.close(); return false; }; </script> </html>