Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Cross browser print request detection (IE 5+, Firefox 6+, Chrome 9+, and Safari 5.1+ )
(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;
}());
@bartonlp

This comment has been minimized.

Copy link

bartonlp commented Feb 26, 2014

Well not quite. On Chrome Version 33.0.1750.117 under Linux Mint 15 at least it does not work 100%. If you right click 'print' it works OK but window.print() doesn't work at all. I hate browsers! Why can't we just have one. I would even be willing to live with Internet Explorer if it was the only one -- well maybe not!

@tsukasa-mixer

This comment has been minimized.

Copy link

tsukasa-mixer commented Aug 5, 2015

$.fn.beforeprint = function(callback) {
    return $(this).each(function() {
        if ( !jQuery.isWindow(this) )
            return;
        if ( this.onbeforeprint !== undefined )
            $(this).on('beforeprint', callback);
        else if ( this.matchMedia )
            this.matchMedia('print').addListener(callback);
    });
};
$.fn.afterprint = function(callback) {
    return $(this).each(function() {
        if ( !jQuery.isWindow(this) )
            return;
        if ( this.onafterprint !== undefined )
            $(this).on('afterprint', callback);
        else if ( this.matchMedia )
            $(this).one('mouseover', callback);
    });
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.