9
votes

Window.onbeforePrint and window.onAfterprint est tiré en même temps

J'ai défini onbeforeprint code> et je modifie mon code HTML et désormais une fois que j'ai terminé l'impression qui se trouve sur le bouton Imprimer, je veux le ONAFTERPRINT CODE> non.

à la place lorsque j'appuie sur la touche kbd> + + Imprimer kbd> le bouton kbd> OnbeforePrint code> est déclenché d'abord, puis le Onraerprint code > L'événement et puis la boîte de dialogue d'impression est affichée. p>

est-ce que je pouvais en quelque sorte que je puisse en quelque sorte modifier mon HTML après que le bouton impression kbd> est cliqué? P>

J'utilise le navigateur IE -9 et le code est comme suit: p>

Code strong> p>

<script type="text/javascript">
    window.onbeforeprint = function () {
        alert('Hello');
    }
    window.onafterprint = function () {
        alert('Bye');
    }
</script>


2 commentaires

Quel navigateur utilisez-vous? Pouvez-vous publier un peu de votre code JavaScript?


Édité mon message avec code et im en utilisant IE 9


3 Réponses :


3
votes

OnbeforePrint Le déclenchement avant la boîte de dialogue apparaît et permet de modifier HTML et ainsi de suite.

ONAFTERPRINT est tiré juste avant que la boîte de dialogue apparaisse. Il n'est même pas possible de savoir si le document était en fait imprimé ou l'utilisateur l'a annulé. Inutile de dire quand l'impression est terminée (si elle a commencé du tout).

Encore une fois: Aucun événement n'est disponible pour suivre tout ce qui s'est passé dans la boîte de dialogue Imprimer, c'est-à-dire une réponse à votre question est NO .

En outre, j'espère que votre besoin ne sera jamais mis en œuvre, car cela permet de frustrer l'utilisateur. Il / elle demande à imprimer un document, mais a eu quelque chose de différent.


2 commentaires

Je dois être en désaccord avec votre dernier commentaire. Parfois, il y a un HTML inutile sur la page pour l'impression. Par exemple, disons que j'ai une page remplie de tables, d'un menu NAV latérale et de boutons. Évidemment, lorsque l'utilisateur va imprimer cette page, ils essaient d'imprimer ces tables. Encore plus loin, disons que vous avez des éléments DOM contrôlés par JavaScript que vous souhaitez montrer lors de l'impression. Si l'utilisateur ne le veut pas, tout ce qu'ils peuvent sélectionner quelles pages qu'ils souhaitent imprimer, mais cela les sauve de traverser et montrant chaque élément en cliquant sur le bouton ou ce qui y est associé.


Il me semble que Firefox (88) et chrome (90 smth) ont un comportement totalement différent: Chrome incendiera "après-dire" après l'annulation / l'impression tandis que Firefox l'appellera après l'ouverture de la boîte de dialogue. Selon le doc ( développeur.mozilla.org/en-us / DOCS / WEB / API / WINDINGEVENTHANDLER S / ... ), Chrome a raison.



-1
votes

Oui, vous pouvez, pas de capture. J'ai ainsi mis en œuvre dans une demande professionnelle. Imprimer dans l'explorateur, Firefox, tous

window.onload = PrintMe;

function PrintMe() {
    window.print();
    setTimeout(function () {
    alert("OK");
// Here you code, for example  __doPostBack('ReturnPrint', '');
    }, 2000);
}


0 commentaires

2
votes

J'ai couru dans ce même problème en essayant d'utiliser l'événement OneArterprint, même dans les navigateurs modernes.

Basé sur l'une des autres réponses ici, j'ai pu proposer cette solution. C'est moi fermer la fenêtre après la fermeture de la boîte de dialogue Imprimer: P>

// When the new window opens, immediately launch a print command,
// then queue up a window close action that will hang while the print dialog is still open.
// So far works in every browser tested(2020-09-22): IE/Chrome/Edge/Firefox
window.print();
setTimeout(function () {
    window.close(); // Replace this line with your own 'afterprint' logic.
}, 2000);


0 commentaires