while for event ejemplos ciclo bucle array javascript browser printing

for - ¿Cómo desencadenar JavaScript en el evento de impresión?



javascript event object (4)

¿Es posible activar un evento javascript cuando un usuario imprime una página? Me gustaría eliminar una dependencia de una biblioteca de JavaScript, cuando un usuario opta por imprimir una página, ya que la biblioteca es ideal para la pantalla pero no para la impresión.

¿Alguna idea de cómo lograr esto?


Para cualquiera que se tropiece con esta respuesta de Google, permítanme aclarar las cosas:

Como señaló Ajay, hay dos eventos que se disparan para imprimir, pero no tienen un buen soporte; por lo que he leído, solo son compatibles con los navegadores Internet Explorer y Firefox (6+). Esos eventos son window.onbeforeprint y window.onafterprint, que (como era de esperar) se activarán antes y después del trabajo de impresión.

Sin embargo, como se señala en el enlace de Joe ( https://.com/a/9920784/578667 ), no es exactamente cómo se implementa en todos los casos. En la mayoría de los casos, ambos eventos se disparan antes del diálogo; en otros, la ejecución del script puede detenerse durante el diálogo de impresión, por lo que ambos eventos pueden dispararse al mismo tiempo (después de que se haya completado el diálogo).

Para obtener más información (y compatibilidad con el navegador) para estos dos eventos:

https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeprint

https://developer.mozilla.org/en-US/docs/DOM/window.onafterprint

La respuesta corta: si espera interferir con el flujo de impresión, no lo haga. Si espera desencadenar código después de imprimir, no va a funcionar como lo desea; esperar un soporte de navegador deficiente, y tratar de degradar con gracia.


Para cualquiera que venga aquí buscando una opción usando Bootstrap como yo, utilicé el siguiente código para lograr esto cuando se hace clic en un botón de impresión . Esto no funcionará cuando presionen CTRL + P.

$("#print_page").click(function(){ $("#print_section").addClass(''visible-print-block''); window.print(); $("#print_section").removeClass(''visible-print-block'');})

¡Necesitará agregar impresión oculta a cualquier cosa que no quiera imprimir y luego agregar una identificación (o una clase si tiene más de una sección) de print_section al bit que desea imprimir! Poco hacky pero funciona!


Se puede hacer sobrescribiendo, por ejemplo, window.onbeforeprint .

Usando Chrome, encontré que la window.matchMedia("print").addListener(function() {alert("Print Dialog open.")}) más arcana window.matchMedia("print").addListener(function() {alert("Print Dialog open.")}) También funciona.

Esta característica discutible se puede utilizar para evitar que los usuarios impriman una página.

La he encontrado la primera vez en Scribd . Allí, si abre el cuadro de diálogo Imprimir con el comando de menú, el contenido de la página se atenuará y aparecerá un mensaje emergente de advertencia explicando por qué no puede imprimir la página. (Nota para el análisis completo: en esa página, control-p también se anula para que no pueda usarlo para abrir el cuadro de diálogo de impresión. Además, hay un @media CSS para la salida de la impresora que oculta el contenido; todo probado en Firefox )


si tiene un escenario en el que desea hacer algo antes de que aparezca el cuadro de diálogo Imprimir o justo después de que el documento se envíe a la cola de la impresora, utilice la ventana de eventos a continuación.onafterprint, window.onbeforeprint