Window.onbeforeprint and Window.onafterprint get fired at the same time

onbeforeprint fired before dialog appears and allows one to change html and so on.

onafterprint is fired just before dialog appears. It is not even possible to know, whether document was actually printed or user canceled it. Needless to say about when printing finished (if started at all).

Again: no event is available to track anything happened in print dialog, i.e. answer to your question is no.

Moreover, I hope what your need will never be implemented, cause this allows to frustrate user. He/she asks to print one document, but got something different.


I ran into this same issue trying to use the onafterprint event, even in modern browsers.

Based on one of the other answers here, I was able to come up with this solution. It let's me close the window after the print dialog is closed:

// 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);