Подтвердить что ты не робот

Обнаружение события печати в браузере

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

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

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

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

4b9b3361

Ответ 1

Теперь вы можете обнаружить запрос на печать в 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/.

Ответ 2

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

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

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

window.onbeforeprint = function() {
    alert("Printing shall commence!");
}

Ответ 3

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

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

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