2012-06-21 12 views
22

È possibile attivare un evento javascript quando un utente stampa una pagina? Vorrei rimuovere una dipendenza da una libreria javascript, quando un utente sceglie di stampare una pagina, poiché la libreria è ottima per lo schermo ma non per la stampa.Come attivare javascript sull'evento di stampa?

Qualche idea su come raggiungere questo obiettivo?

+1

Che cosa stai cercando di ottenere esattamente?Cosa intendi per "la libreria è ottima per lo schermo ma non per la stampa"? –

+1

Cosa c'entra una libreria JavaScript con la stampa? Il browser non richiama alcun script di pagina quando si stampa comunque. – Pointy

+0

usa la funzione window.onprint, window.onafterprint, window.onbeforeprint –

risposta

24

Per chiunque inciampo su questa risposta da Google, vorrei provare a chiarire le cose:

Come Ajay ha sottolineato, ci sono due eventi che vengono sparati per la stampa, ma non sono ben supportati; per quanto ho letto, sono supportati solo nei browser Internet Explorer e Firefox (6+). Questi eventi sono window.onbeforeprint e window.onafterprint, che (come ci si aspetterebbe) spareranno prima e dopo il lavoro di stampa.

Tuttavia, come sottolineato nel collegamento di Joe (https://stackoverflow.com/a/9920784/578667), che non è esattamente come viene implementato in tutti i casi. Nella maggior parte dei casi, entrambi gli eventi si attivano prima del dialogo; in altri casi, l'esecuzione dello script potrebbe essere interrotta durante la finestra di dialogo di stampa, quindi entrambi gli eventi possono essere attivati ​​contemporaneamente (dopo che la finestra di dialogo è stata completata).

Per ulteriori informazioni (e il supporto del browser) per questi due eventi:

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

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

La risposta breve: se siete la speranza di interferire con il flusso di stampa, non fare . Se speri di attivare il codice dopo la stampa, non funzionerà come vuoi; aspettarsi un supporto scarso del browser e provare a degradare con garbo.

+2

Inoltre, se stai cercando di modificare il layout o il display per la stampa, dovresti farlo con un foglio di stile di stampa (o le regole '@media print' all'interno del tuo css) e non JavaScript –

+0

@TomPietrosanti Sono totalmente d'accordo, ma ci sono alcune cose che non puoi fare con i CSS (come cambiare l'ordine degli elementi). Vedi [la mia domanda] (http://stackoverflow.com/questions/25030208/dom-manipulation-on-print-only). – chharvey

+0

È possibile modificare l'ordine (fino a un certo grado) se è possibile utilizzare la flexbox, altrimenti è vero. Se non hai bisogno di JS, vorrei evitarlo - può portare così alcuni bug molto strani. –

0

se si dispone di uno scenario in cui u vogliono fare qualcosa prima che viene visualizzata la finestra di stampa o subito dopo il documento viene inviato ad un uso coda di stampa in grado di utilizzare gli eventi sotto window.onafterprint, window.onbeforeprint

+0

Ho provato a Chome, ma non funziona. Anche se potrebbe essere in IE, ma IE non è buono con me qui. Grazie. http://stackoverflow.com/a/9920784/578667 – Joe

+1

Con un po 'di hackerydoo, puoi farlo funzionare anche nei browser basati su webkit: http://tjvantoll.com/2012/06/15/detecting-print- request-with-javascript/L'unico rimasto fuori è Opera, ma un individuo intraprendente potrebbe probabilmente trovare anche un polyfill/hack per quello. –

9

può essere fatto mediante sovrascrittura, ad esempio, window.onbeforeprint.

Utilizzando Chrome, ho scoperto che il più arcano window.matchMedia("print").addListener(function() {alert("Print Dialog open.")}) funziona anche.

Questa caratteristica discutibile può essere utilizzato al fine di scoraggiare gli utenti dalla stampa di una pagina.

che ho incontrato per la prima volta su Scribd. Qui, se apri la finestra di dialogo di stampa usando il comando di menu, il contenuto della pagina sarà disattivato e verrà visualizzato un messaggio di avvertenza che spiega perché non è possibile stampare la pagina. (Nota per l'analisi completa: su quella pagina, anche control-p è sovrascritto quindi non è possibile utilizzarlo per aprire la finestra di dialogo di stampa.Inoltre, c'è un @media CSS per l'output della stampante che nasconde il contenuto, tutto testato su Firefox).

+0

In Chrome, la tua soluzione "arcana" funziona, ma succede quattro volte. – chharvey

+2

Immagino che se tu abbia più stili di stampa o fogli di stile di stampa, sparerebbe per tutti quelli che hai. Quando eseguo questo codice senza stili di stampa, viene eseguito una volta. –

0

Per chi viene qui cercando un'opzione utilizzando Bootstrap così com'ero, ho utilizzato il seguente codice per ottenere questo quando si fa clic su un pulsante di stampa. Questo volontà non lavoro quando premere CTRL + P.

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

è necessario aggiungere nascosto-stampa a tutto ciò che non si desidera stampare e quindi aggiungere un ID (o di una classe, se si dispone di più una sezione) di print_section al bit che si desidera stampare! Bit hacky ma funziona!

+0

È anche possibile [sovrascrivere CTRL + P] (https://stackoverflow.com/a/3680946/479156) per attivare lo stesso codice/funzione, ma ciò non è ancora al 100% poiché ci sono più modi per stampare. – Ivar

Problemi correlati