onbeforeprint () и onafterprint () эквивалентны для браузеров не IE - PullRequest
18 голосов
/ 27 июля 2010

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

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

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

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

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

Ответы [ 5 ]

32 голосов
/ 27 марта 2013

Многие браузеры теперь поддерживают 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/

6 голосов
/ 27 июля 2010

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

4 голосов
/ 27 июля 2010

Попробуйте маскировать нативный 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);
  }

}())

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

1 голос
/ 14 декабря 2016
(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;}());

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

0 голосов
/ 23 августа 2012

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

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

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

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