2010-07-15 27 views
8

Mi sitio tiene un botón "imprimir esta página".Safari: Impedir dos cuadros de diálogo de impresión al imprimir un Iframe

Cargué una plantilla de impresión estática de un archivo HTML en un iframe oculto, copio el HTML en esa página usando jQuery y llamo al window.print() desde la página de Iframe. Todo está bien, excepto en Safari, que también quiere imprimir el cuadro principal, así que tengo dos diálogos de impresión abiertos.

He intentado llamar a window.print desde dentro del iframe, y llamándolo desde el principal, apuntar al iframe (document.printFrame.window.print()) pero obtengo dos cuadros de diálogo independientemente.

¿Alguien sabe una forma de evitar esto? Solo quiero imprimir el Iframe, no el padre.

Respuesta

1

No puedo reproducir el error; funciona bien para mí (es decir, obtengo solo un cuadro de diálogo Imprimir), independientemente de si lo llamo desde el marco flotante o principal. ¿Tal vez estás llamando a window.print() dos veces en algún lugar?

Me postulo Safari 4.0.3 en Mac OS X 10.6

EDIT: aquí está: http://jsfiddle.net/Kq9dc/

EDIT 2: Acabo de probar esto en Safari 5.0/Windows 7 y se está funcionando correctamente ¿Estás seguro de que no es algo más en tu código?

EDITAR 3: Just probado esto en varias versiones de Safari en WinXP:

Safari 3.0 (first beta): Not working (no print dialog) 
Safari 3.1 (first non-beta): Works fine 
Safari 4.0: Works fine 
Safari 5.0: Works fine 
+0

Si lo llamara dos veces, esperaría el mismo comportamiento en otros navegadores. Hmmm ... –

+0

@Diodeus ¿está recibiendo 2 cuadros de diálogo de impresión con mi [violín] (http://jsfiddle.net/Kq9dc/)? – quantumSoup

+0

@Diodeus Ran más pruebas, parecen estar funcionando bien – quantumSoup

0

probar esto. Poner esto en dicho marco flotante:

function printPage() { print(); } 

luego en la matriz:

function printIframe(id) 
{ 
    var iframe = document.frames ? document.frames[id] : document.getElementById(id); 
    var ifWin = iframe.contentWindow || iframe; 
    iframe.focus(); 
    ifWin.printPage(); 
    return false; 
} 

Si esto no funciona bien, que lo intentaría abrir una nueva ventana/pestaña, y llenarlo con el código HTML para imprimir .

var printwin = window.open("about:blank", "_new"); 
printwin.document.open(); 
printwin.document.write("HTML goes here..javascript which is going to print is in there too.."); 
printwin.document.close(); 

Dos cosas menores a tener en cuenta son

  • dividir </script> en la nueva ventana, por lo que no termina prematuramente
  • uso setTimeout() para ejecutar después de onLoad() ha terminado De lo contrario, los usuarios de Firefox pueden ver una página en blanco debajo del cuadro de diálogo de impresión
Cuestiones relacionadas