Обнаружение события печати браузера - PullRequest
46 голосов
/ 05 августа 2009

Можно ли определить, когда пользователь печатает что-то из своего браузера?

Чтобы усложнить ситуацию, если мы представляем пользователю документ PDF в новом окне, можно ли обнаружить печатьэтот документ (при условии, что пользователь печатает его из окна браузера)?

Самое близкое, что мне удалось найти, - это реализовать пользовательские функции печати (что-то вроде this ) и отслеживать, когдакоторый вызывается

Меня в первую очередь интересует решение, которое работает для Internet Explorer (6 или более поздняя версия)

Ответы [ 3 ]

103 голосов
/ 16 июня 2012

Теперь вы можете обнаружить запрос на печать в IE 5+, Firefox 6+, Chrome 9+ и Safari 5+, используя следующую технику:

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

Я более подробно расскажу о том, что это делает и для чего можно использовать на http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/.

5 голосов
/ 10 декабря 2010

Для Internet Exploder есть события window.onbeforeprint и window.onafterprint, но они не работают ни с каким другим браузером, и в результате они обычно бесполезны.

По какой-то причине они работают точно так же, и оба выполняют свои обработчики событий до того, как откроется окно печати. ​​

Но если вы все равно хотите, несмотря на эти предостережения, вот пример:

window.onbeforeprint = function() {
    alert("Printing shall commence!");
}
2 голосов
/ 21 сентября 2012

Если это только для целей отслеживания, возможно, вы могли бы установить фоновый URL в печатных материалах CSS для страницы сервера (.aspx, .php и т. Д.), А затем что-то сделать на сервере?

Этот парень утверждает, что это работает.

Это не так универсально, как решение TJ, но оно может быть менее ошибочным (см. Сообщение в блоге TJs о найденных им проблемах), когда требуется только отслеживание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...