2010-03-31 25 views
51

que estoy haciendo algo como esto en javascript para imprimir una sección de mi página en clic de un enlacewindow.print() no funciona en IE

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 por favor ayuda

Respuesta

1

No estoy seguro, pero creo que se produce debido a las reglas de seguridad de la InternetExplorer ...

Si se llama a una función como print() que pide al usuario manualmente si quiere permitir secuencias de comandos activas, si hace clic en la barra amarilla y selecciona 'Sí', aparece el cuadro de diálogo de impresión. Si hace clic en "No" o simplemente no hace nada, no está ejecutando las partes que se consideran secuencias de comandos activas u otras funciones de seguridad relevantes para JavaScript.

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

Debe intentar agregar la página a los sitios de confianza en InternetExplorer o cambiar la configuración de seguridad.

Puede haber una manera de manejar las políticas de seguridad en el javascript mismo, pero no sé mucho acerca de las políticas de seguridad de InternetExplorer.

Esperanza esto ayuda

0

La forma en que normalmente manejamos la impresión es que basta con abrir la nueva ventana con todo lo que necesita ser enviado a la impresora. Luego, el usuario realmente hace clic en el botón Imprimir de su navegador.

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

0

Cierre la ventana sólo cuando no es 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(); 
} 
0

estoy también se enfrentan a este problema.

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

cuando eliminamos esta función de impresión 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 función de impresión funcionará en IE. Esta es una solución alternativa.

La mejor suerte.

@Pratik

111

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

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

A continuación, la función de impresión funcionará en todos los navegadores ...

+0

Muchas gracias ... Funciona para mí. – PythonDev

+0

Funcionó para mí también - nice one – JoshuaDavid

+4

Muchas gracias. la falta de document.close() fue la causa; – Ahmad

1

que he tenido este problema antes, y la solución es simplemente para llamar a la ventana.print() en el IE, en lugar de llamar a la impresión de la instancia de la ventana:

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

Esta respuesta suya hace casi un año me ha ayudado.He publicado esta solución w.r.t en mi propia Qs: http://stackoverflow.com/questions/13948313/how-to-print-a-pdf/13948819#13948819. Hasta votado. –

1

sólo tiene que esperar algún tiempo antes de cerrar la ventana!

if (navigator.appName != 'Microsoft Internet Explorer') { 
    newWin.close(); 
} else { 
    window.setTimeout(function() {newWin.close()}, 3000); 
} 
6
function printDiv() { 
    var divToPrint = document.getElementById('printArea'); 
    newWin= window.open(); 
    newWin.document.write(divToPrint.innerHTML); 
    newWin.location.reload(); 
    newWin.focus(); 
    newWin.print(); 
    newWin.close(); 
} 
1

me dijeron que hacer document.close después document.write, no veo cómo o por qué, pero esto hizo que mi guión a esperar hasta que cerraba el diálogo de impresión antes de que corrió 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(); 
4

Añadir newWin.document.close();, así:

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 que IE feliz. HTH, -Ted

1

complemento condición de comprobación de onload

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

Esto funcionó para mí, funciona en Firefox, IE y 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(); 
0
function functionname() { 

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

sólo para añadir alguna información adicional. En IE 11, utilizando simplemente

window.open() 

provoca

window.document 

que no está definido. Para resolver esto, use

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.

0
<!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> 
+0

El nombre del archivo es print.html –