Ответ 1
Я не уверен, что другие браузеры позволят вам. Конечно, вы можете указать изображение где-нибудь в таблице стилей печати, которая, вероятно, будет вызываться только при печати, для onbeforeprint
Я хочу отправить некоторую информацию обратно в мою базу данных, когда пользователь печатает определенную веб-страницу. Я могу сделать это в IE с onbeforeprint()
и onafterprint()
, но я бы хотел, чтобы обойтись без агностического способа сделать то же самое. Не волнует, какую комбинацию технологий я должен использовать (PHP, MySQL, JavaScript, HTML), пока это делается. Любые идеи?
EDIT:
Все еще есть некоторые проблемы с этим. Я попытался помещать свою функцию в свой Print.css
как образ, но я как-то испортил его. Затем я попробовал просто добавить слушателя событий, но я не могу заставить это работать совершенно правильно. Если кто-то может предоставить более подробную информацию о том, как я могу назвать функцию прямо перед печатью в ЛЮБОЙ браузер, я был бы признателен.
EDIT:
Сейчас я отказываюсь от этого, я решил с другим способом сделать то, что хочу. Я с нетерпением жду того дня, когда FireFox поддерживает onbeforeprint() и onafterprint().
Я не уверен, что другие браузеры позволят вам. Конечно, вы можете указать изображение где-нибудь в таблице стилей печати, которая, вероятно, будет вызываться только при печати, для onbeforeprint
Многие браузеры теперь поддерживают window.matchMedia
. Этот API позволяет обнаруживать, когда запросы мультимедийных сообщений CSS вступают в силу (например, вращение экрана или печать документа). Для кросс-браузерного подхода объедините 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 и использующие серверное динамическое создание изображений script, скажут вам, что страница была напечатана, даже когда посетитель просто отправился в режим предварительного просмотра, а затем отменил.
Однако я хотел бы узнать, как получить правильную информацию, чтобы я мог быть уверен, что страница была напечатана.
(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;}());
Этот код работает во всех браузерах для обнаружения событий печати.