2009-08-05 21 views
41

È possibile rilevare quando un utente sta stampando qualcosa dal proprio browser?Rilevamento evento stampa browser

Per complicare le cose, se stiamo presentando un utente con un documento PDF in una nuova finestra è possibile rilevare la stampa di quel documento (supponendo che l'utente lo stampi dalla finestra del browser)?

Il più vicino che ho potuto trovare è se implementiamo funzionalità di stampa personalizzata (qualcosa come this) e pista quando che è invocato

Sono principalmente interessato a una soluzione che funziona per Internet Explorer (6 o successivo)

risposta

96

È ora possibile rilevare una richiesta di stampa in IE 5+, Firefox 6+, Chrome 9+, e Safari 5+ utilizzando la seguente tecnica:

(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; 
}()); 

vado più in dettaglio in che cosa questo sta facendo e che cosa può essere utilizzato per in http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/.

+1

Sei fantastico. Ho cercato il supporto Chrome/Safari 'onbeforeprint' per giorni. Avrei dovuto saperlo meglio che abbandonare l'abbraccio di riscaldamento di SO. – Pat

+2

+1, molto bello, sto pianificando di plagiare questa risposta molto presto. –

+8

Sembra che non funzioni più su Chrome 38 su Windows. 'beforePrint' non spara mai. http://jsfiddle.net/o5oosa9o/ (Fai clic con il pulsante destro del mouse sul iframe Risultati e scegli "Stampa ...") – Michael

3

Per Internet Exploder, ci sono gli eventi window.onbeforeprint e window.onafterprint ma non funzionano con nessun altro browser e di conseguenza sono solitamente inutili.

Sembra che funzionino esattamente allo stesso modo per qualche motivo, eseguendo entrambi i gestori di eventi prima che la finestra di stampa si apra.

Ma nel caso in cui si vuole che in ogni caso, nonostante queste riserve, ecco un esempio:

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

Se è solo a scopo di monitoraggio, forse è possibile impostare un URL di sfondo in un supporto di stampa CSS su una pagina del server (.aspx, .php, ecc.) E quindi fare qualcosa sul server?

This guy claims it works.

questo non è così versatile come la soluzione di TJ, ma può essere meno buggy (vedi TJs post sul blog per i problemi che ha trovato) quando è necessario solo il monitoraggio.

+0

Penso che ci fossero alcuni problemi con il mio approccio, come ad esempio le anteprime di stampa, ecc., Ma per meno di una registrazione critica, ha funzionato bene per me. –

Problemi correlati