onbeforeprint () и onafterprint () эквивалент для браузеров без IE

Я хочу отправить некоторую информацию обратно в мою базу данных, когда пользователь печатает определенную веб-страницу. Я могу сделать это в IE с onbeforeprint() и onafterprint() но я бы хотел, чтобы обозреватель агностически делал то же самое. Не волнует, какую комбинацию технологий я должен использовать (PHP, MySQL, JavaScript, HTML), пока это делается. Есть идеи?

РЕДАКТИРОВАТЬ:

Все еще есть проблемы с этим. Я попытался поставить свою функцию в свой Print.css как образ, но я как-то испортил его. Затем я попробовал просто добавить слушателя событий, но я не могу заставить это работать совершенно правильно. Если кто-то может предоставить более подробную информацию о том, как я могу назвать функцию прямо перед печатью в ЛЮБОЙ браузер, я был бы признателен.

РЕДАКТИРОВАТЬ:

На данный момент я отказываюсь от этого, я поселился с другим способом делать то, что хочу. Я с нетерпением жду того дня, когда FireFox поддерживает onbeforeprint () и onafterprint ().

Я не уверен, что другие браузеры позволят вам это сделать . Конечно, вы можете указать изображение где-нибудь в таблице стилей печати, которая, вероятно, будет вызвана только печатью, для onbeforeprint

Многие браузеры теперь поддерживают window.matchMedia . Этот API позволяет вам обнаруживать, когда запросы мультимедиа CSS вступают в силу (например, rotation экрана или печать документа). Для кросс-браузерного подхода объедините window.matchMedia с window.onbeforeprint / window.onafterprint .

Следующее может привести к нескольким вызовам beforePrint() и afterPrint() (например, Chrome запускает прослушиватель каждый раз при повторном просмотре печати ). Это может быть или не быть желательным в зависимости от конкретной обработки, которую вы делаете в ответ на печать.

 if ('matchMedia' in window) { // Chrome, Firefox, and IE 10 support mediaMatch listeners window.matchMedia('print').addListener(function(media) { if (media.matches) { beforePrint(); } else { // Fires immediately, so wait for the first mouse movement $(document).one('mouseover', afterPrint); } }); } else { // IE and Firefox fire before/after events $(window).on('beforeprint', beforePrint); $(window).on('afterprint', afterPrint); } 

Подробнее: http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/

Попробуйте маскировать родной window.print() с помощью собственного …

 // hide our vars from the global scope (function(){ // make a copy of the native window.print var _print = this.print; // create a new window.print this.print = function () { // if `onbeforeprint` exists, call it. if (this.onbeforeprint) onbeforeprint(this); // call the original `window.print`. _print(); // if `onafterprint` exists, call it. if (this.onafterprint) onafterprint(this); } }()) 

Обновлено: комментарии.

Я думаю, что это просто невозможно. Или, по крайней мере, не с какой-либо технологией, которую я знаю, ни с каким-либо из ответов, приведенных ранее.

Как с использованием onafterprint, так и с использованием сценария с динамическим построением сервера serveride скажут вам, что страница была напечатана, даже когда посетитель просто отправился в режим предварительного просмотра, а затем был отменен.

Однако я хотел бы узнать, как получить правильную информацию, чтобы я мог быть уверен, что страница была напечатана.

 (function() { var beforePrint = function() { if($('.modal').hasClass('in')){ $('body').removeClass('modal-open'); } }; var afterPrint = function() { if($('.modal').hasClass('in')){ $('body').addClass('modal-open'); } }; if (window.matchMedia) { var mediaQueryList = window.matchMedia('print'); mediaQueryList.addListener(function(mql) { if (mql.matches) { beforePrint(); } else { afterPrint(); } }); } window.onbeforeprint = beforePrint; window.onafterprint = afterPrint;}()); 

Этот код работает во всех браузерах для обнаружения событий печати.