2009-08-11 18 views
8

Esta solución funciona bien en Firefox 3.0+, pero IE8/7 solo está imprimiendo toda la página, no el iframe específico.Imprimir un iFrame oculto en IE

Esta es la función que se llama cuando se hace clic en el enlace de impresión:

var printfunc= function(){ 
    var url = http://someurl.aspx; 
    //This iFrame has style="visibility: hidden; position: absolute; left: -9000px;" 
    var printIFrame = GetObj('PrintIFrame'); 
    printIFrame.src = url; 
} 

El aspx que se carga en el iframe oculto llama a la función de impresión en el controlador de eventos onload:

<body onload="PrintJS.Print();"> 

La función de impresión:

this.Print = function(){ 
     self.focus(); 
     self.print(); 
     return false; 
} 

también he intentado esto con "ventana" en lugar de "yo" Ambas soluciones funcionan bien en FF, pero IE no parece tener el alcance correcto. ¿Alguna idea? ¡Una solución de navegador cruzado sería genial! Además, prefiero usar estilos de impresión CSS, pero el contenido que estoy imprimiendo es diferente al de la página, de ahí la necesidad de cargar html en un iframe oculto.

+1

¿Es a una impresora secreta que nadie conoce? (lo siento, no pude resistir :)) – KristoferA

Respuesta

20

Solución: En IE, una iframe con visibilidad: oculto; hace que el navegador imprima el padre. Cambiar los estilos a la altura: 0px; ancho: 0px; arregla este problema

+0

¿Qué pasa si usaremos 'display: none;' en lugar de 'visibility: hidden;'? En este caso, no es necesario establecer el alto y el ancho. – Debiprasad

+0

Tengo el mismo problema con 'display: none;' sin embargo, si ajusto el alto y el ancho a 0, y luego alternar la visualización, haga el '.focus()' seguido de '.print()' luego cambie el mostrar de nuevo, funciona bien. – gattsbr

0

Pruebe document.parentWindow.print(); en lugar de self.print() ...

2
Documento

Padres:

<!doctype html> 
<html> 
    <head> 
     <script> 
     function printIframe(iframe_id) { 

      if (navigator.appName.toUpperCase() == 'MICROSOFT INTERNET EXPLORER') { 
       document.frames[iframe_id].focus(); 
       document.frames[iframe_id].print(); 
      } else { 
       window.frames[iframe_id].focus(); 
       window.frames[iframe_id].print(); 
      } 
     } 
     </script> 
    </head> 
    <body> 
     <a href="javascript:printIframe('printMe');">Print the iframe.</a> 
     <iframe id="printMe" src="iframe.html"></iframe> 
    </body> 
</html> 

documento marco flotante:

<!doctype html> 
<html> 
    <head></head> 
    <body> 
     <p>Print this.</p> 
    </body> 
</html> 

Desde el siguiente enlace: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=449

+0

esto funcionó para mí! Gracias. – Pons

+0

Spoofing no es tan 2013 – Codebeat

+0

¿Puede incluir aquí las ideas principales de la respuesta? Solo se desalientan las respuestas de enlace. – Thomas

Cuestiones relacionadas