2009-08-05 18 views
41

¿Es posible detectar cuándo un usuario está imprimiendo algo desde su navegador?Detección del evento de impresión del navegador

Para complicar las cosas, si presentamos a un usuario con un documento PDF en una nueva ventana, ¿es posible detectar la impresión de ese documento (suponiendo que el usuario lo imprima desde la ventana del navegador)?

Lo más cerca que he podido encontrar es si ponemos en práctica la funcionalidad de impresión personalizada (algo así como this) y la pista cuando se invoca que

estoy principalmente interesado en una solución que funciona para Internet Explorer (6 o posterior)

Respuesta

96

Ahora puede detectar una solicitud de impresión en IE 5+, 6+ Firefox, Chrome 9+, y Safari 5+ usando la siguiente técnica:

(function() { 
    var beforePrint = function() { 
     console.log('Functionality to run before printing.'); 
    }; 
    var afterPrint = function() { 
     console.log('Functionality to run after printing'); 
    }; 

    if (window.matchMedia) { 
     var mediaQueryList = window.matchMedia('print'); 
     mediaQueryList.addListener(function(mql) { 
      if (mql.matches) { 
       beforePrint(); 
      } else { 
       afterPrint(); 
      } 
     }); 
    } 

    window.onbeforeprint = beforePrint; 
    window.onafterprint = afterPrint; 
}()); 

de entrar en más detalle en lo que esto está haciendo y lo que se puede utilizar para al http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/.

+1

Eres increíble. He estado buscando compatibilidad con Chrome/Safari "onbeforeprint" durante días. Debería haber sabido mejor que dejar el abrazo de SO. – Pat

+2

+1, muy bien, planeo plagiar esta respuesta muy pronto. –

+8

Esto ya no parece funcionar en Chrome 38 en Windows. 'beforePrint' nunca se dispara. http://jsfiddle.net/o5oosa9o/ (haga clic con el botón derecho en el iframe Resultados y elija "Imprimir ...") – Michael

3

Para Internet Explosivo, existen los eventos window.onbeforeprint y window.onafterprint pero no funcionan con ningún otro navegador y, como resultado, suelen ser inútiles.

Parecen funcionar exactamente igual por alguna razón, ambos ejecutan sus manejadores de eventos antes de que se abra la ventana de impresión.

Pero en caso de que quiera de todos modos a pesar de estas advertencias, he aquí un ejemplo:

window.onbeforeprint = function() { 
    alert("Printing shall commence!"); 
} 
2

Si solo es con fines de seguimiento, ¿podría establecer una url de fondo en un medio de impresión CSS en una página de servidor (.aspx, .php, etc.) y luego hacer algo en el servidor?

This guy claims it works.

Esto no es tan versátil como solución de TJ, pero puede ser menos con errores (ver TJs entrada de blog para los problemas que encontró), cuando sólo se necesita seguimiento.

+0

Creo que hubo algunos problemas con mi enfoque, como las vistas previas de impresión, etc., pero para el registro no crítico, funcionó bien para mí. –

Cuestiones relacionadas