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

17

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

EDIT:

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

EDIT:

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

    
задан ubiquibacon 27.07.2010 в 01:44
источник

5 ответов

6

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

    
ответ дан Wrikken 27.07.2010 в 01:52
источник
30

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

Подробнее: Ссылка

    
ответ дан user113215 27.03.2013 в 16:27
источник
4

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

}())

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

    
ответ дан Dagg Nabbit 27.07.2010 в 01:55
источник
0

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

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

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

    
ответ дан userfuser 22.08.2012 в 23:22
источник
0
(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;}());

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

    
ответ дан Dayachand Patel 14.12.2016 в 10:18
источник