92 votes

Comment détecter la fin de window.print()

Dans mon application, j'ai essayé d'imprimer une page de bons pour l'utilisateur comme ceci :

  var htm ="<div>Voucher Details</div>";
  $('#divprint').html(htm);
  window.setTimeout('window.print()',2000);

' divprint est un div dans ma page qui stocke des informations sur le bon d'achat.

Cela fonctionne, et la page d'impression s'affiche. Mais je veux faire avancer l'application une fois que l'utilisateur a cliqué sur " ". print ou close dans la boîte de dialogue d'impression du navigateur.

Par exemple, je voudrais rediriger l'utilisateur vers une autre page après la fermeture de la fenêtre pop-up :

window.application.directtoantherpage();//a function which direct user to other page

Comment puis-je déterminer quand la fenêtre pop-up d'impression est fermée ou quand l'impression est terminée ?

136voto

Adam Points 14766

Vous pouvez écouter l'événement afterprint.

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

window.onafterprint = function(){
   console.log("Printing completed...");
}

Il est peut-être possible d'utiliser window.matchMedia pour obtenir cette fonctionnalité d'une autre manière.

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

}());

Fuente: http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/

67voto

Sagreen Points 679

Sur chrome (V.35.0.1916.153 m) Essayez ceci :

function loadPrint() {
    window.print();
    setTimeout(function () { window.close(); }, 100);
}

Fonctionne très bien pour moi. Il ferme la fenêtre après que l'utilisateur a fini de travailler sur le dialogue d'impression.

11voto

SAM Points 111

Compatible avec chrome, firefox, opera, Internet Explorer
Remarque : jQuery est requis.

<script>

    window.onafterprint = function(e){
        $(window).off('mousemove', window.onafterprint);
        console.log('Print Dialog Closed..');
    };

    window.print();

    setTimeout(function(){
        $(window).one('mousemove', window.onafterprint);
    }, 1);

</script>

4voto

user113215 Points 4402

Véase https://stackoverflow.com/a/15662720/687315 . Comme solution de contournement, vous pouvez écouter le message afterPrint sur la fenêtre (Firefox et IE) et écouter le mouvement de la souris sur le document (indiquant que l'utilisateur a fermé la boîte de dialogue d'impression et est revenu à la page) après l'événement window.mediaMatch L'API indique que le support ne correspond plus à "print" (Firefox et Chrome).

Gardez à l'esprit que l'utilisateur peut ou non avoir effectivement imprimé le document. En outre, si vous appelez window.print() trop souvent, dans Chrome, l'utilisateur n'a peut-être même pas été invité à imprimer.

4voto

user3017502 Points 57

Vous pouvez détecter quand window.print() est terminé simplement en le mettant dans une autre fonction

//function to call if you want to print
var onPrintFinished=function(printed){console.log("do something...");}

//print command
onPrintFinished(window.print());

testé dans Firefox,Google chrome,IE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X