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 ?

4voto

Rahil Ahmad Points 755

Window.print se comporte de manière synchrone sur chrome essayez ceci dans votre console

window.print();
console.log("printed");

"imprimé" ne s'affiche pas à moins que la boîte de dialogue d'impression soit fermée (annulée/sauvegardée/imprimée) par l'utilisateur.

Voici une explication plus détaillée sur cette question.

Je ne suis pas sûr pour IE ou Firefox, je vérifierai et mettrai à jour plus tard.

2voto

Jack Franzen Points 728

En fait, cela a fonctionné pour moi dans Chrome. J'ai été assez surpris.

jQuery(document).bind("keyup keydown", function(e){
    if(e.ctrlKey && e.keyCode == 80){
         Print(); e.preventDefault();
    }
});

Où Print est une fonction que j'ai écrite qui appelle window.print() ; Elle fonctionne aussi comme un pur bloqueur si vous désactivez Print() ;

Comme indiqué ici par l'utilisateur3017502

window.print() fera une pause, vous pouvez donc ajouter un onPrintFinish ou un onPrintBegin comme ceci

function Print(){
    onPrintBegin
    window.print();
    onPrintFinish(); 
}

2voto

Pakk Points 533

J'ai testé IE, FF, Chrome et cela fonctionne dans tous les cas.

    setTimeout(function () { window.print(); }, 500);
    window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

2voto

FriendlyDev Points 21

Étant donné que vous souhaitez attendre que la boîte de dialogue d'impression disparaisse, j'utiliserais la liaison du focus sur la fenêtre.

print();

var handler = function(){
    //unbind task();
    $(window).unbind("focus",handler);
}

$(window).bind("focus",handler);

En plaçant la fonction unbind dans la fonction handler, nous empêchons l'événement focus de rester lié à la fenêtre.

1voto

WHK Points 357

Imprimer dans une nouvelle fenêtre avec w = window.open(url, '_blank') et essayer w.focus();w.close() ; et détecter quand la page est fermée. Fonctionne dans tous les navigateurs.

w = window.open(url, '_blank');
w.onunload = function(){
 console.log('closed!');
}
w.focus();
w.print();
w.close();

La fenêtre se ferme après la fin de l'impression.

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