php - onbeforeprint() y onafterprint() equivalentes para navegadores que no son IE
javascript mysql (5)
Quiero enviar algo de información a mi base de datos cuando un usuario imprime una determinada página web. Puedo hacer esto en IE con onbeforeprint()
y onafterprint()
pero me gustaría onafterprint()
de hacer lo mismo. No me importa qué combinación de tecnologías tengo que usar (PHP, MySQL, JavaScript, HTML) siempre que se haga. ¿Algunas ideas?
EDITAR:
Sigo teniendo algunos problemas con esto. Intenté poner mi función en mi Print.css
como una imagen, pero la estoy arruinando de alguna manera. Luego intenté simplemente agregar un detector de eventos, pero tampoco puedo hacer que funcione bien. Si alguien puede proporcionar más detalles sobre cómo puedo llamar a una función antes de imprimir en CUALQUIER navegador, lo apreciaría.
EDITAR:
Por ahora estoy renunciando a esto, me he conformado con otra forma de hacer lo que quiero. Espero con interés el día en que FireFox admita onbeforeprint () y onafterprint ().
Creo que simplemente no es posible hacerlo correctamente. O al menos, no con ninguna tecnología que conozca ni con ninguna de las respuestas dadas anteriormente.
Tanto el uso de onafterprint como el uso de scripts de generación de imágenes dinámicas del lado del servidor le dirían que la página se imprimió incluso cuando el visitante simplemente se fue al modo de vista previa de impresión y luego se canceló.
Sin embargo, me gustaría aprender cómo obtener la información adecuada, para poder estar seguro de que la página se imprimió realmente.
Intente enmascarar el window.print()
nativo con su propio ...
// hide our vars from the global scope
(function(){
// make a copy of the native window.print
var _print = this.print;
// create a new window.print
this.print = function () {
// if `onbeforeprint` exists, call it.
if (this.onbeforeprint) onbeforeprint(this);
// call the original `window.print`.
_print();
// if `onafterprint` exists, call it.
if (this.onafterprint) onafterprint(this);
}
}())
Actualizado: comentarios.
No estoy seguro de que otros navegadores te lo permitan . Por supuesto, podría especificar una imagen en algún lugar de una hoja de estilo de impresión, que probablemente solo se llamará en una impresión, para la onbeforeprint
Muchos navegadores ahora soportan window.matchMedia
. Esta API le permite detectar cuándo entran en vigencia las consultas de CSS (por ejemplo, rotar la pantalla o imprimir el documento). Para un enfoque de navegador cruzado, combine window.matchMedia
con window.onbeforeprint
/ window.onafterprint
.
Lo siguiente puede resultar en múltiples llamadas a beforePrint()
y afterPrint()
(por ejemplo, Chrome dispara al oyente cada vez que se regenera la vista previa de impresión ). Esto puede o no ser deseable dependiendo del procesamiento particular que esté haciendo en respuesta a la impresión.
if (''matchMedia'' in window) {
// Chrome, Firefox, and IE 10 support mediaMatch listeners
window.matchMedia(''print'').addListener(function(media) {
if (media.matches) {
beforePrint();
} else {
// Fires immediately, so wait for the first mouse movement
$(document).one(''mouseover'', afterPrint);
}
});
} else {
// IE and Firefox fire before/after events
$(window).on(''beforeprint'', beforePrint);
$(window).on(''afterprint'', afterPrint);
}
Más: http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/
(function() {
var beforePrint = function() {
if($(''.modal'').hasClass(''in'')){
$(''body'').removeClass(''modal-open'');
}
};
var afterPrint = function() {
if($(''.modal'').hasClass(''in'')){
$(''body'').addClass(''modal-open'');
}
};
if (window.matchMedia) {
var mediaQueryList = window.matchMedia(''print'');
mediaQueryList.addListener(function(mql) {
if (mql.matches) {
beforePrint();
} else {
afterPrint();
}
});
}
window.onbeforeprint = beforePrint;
window.onafterprint = afterPrint;}());
Este código funciona en todos los navegadores para detectar eventos de impresión.