Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Как узнать, что пользователь печатает веб-страницу на принтере?

У нас тут задача в процессе производства продукта появилась — занести в лог, что пользователь сделал попытку печати чего-либо в браузере. Есть событие onbeforeprint, но оно есть только в Эксплорере и Файерфоксе.

Придумал такое решение — перед печатью браузер накладывает стиль CSS для печати, если он есть, этим можно воспользоваться:

@media print {
    body {
        background: url(http://example.org/user-tries-to-print.php);
    }
}

Браузер попытается загрузить фоновое изображение (и загружает, я попробовал), выполнится серверный скрипт и положит в логи то, что нужно.

15 комментариев
Алексей 2013

«отправляет на принтер»? «печатает на принтере»?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Алексей:

Да, букву не допечатал. Исправлено.

nqst.net 2013

tries-to-print.php :)

Линар 2013

здорово придумано
а при повторной печати (без перезагрузки страницы) отправляется запрос?
хотя количество попыток, наверное, не так важно

makishvili (makishvili.com) 2013

Комментарий для Евгения Степанищева:

Женя, ты хитрый лис :)
А я ломал голову, как навесить счётчики на печать.

Спасибо.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Линар:

а при повторной печати (без перезагрузки страницы) отправляется запрос?
хотя количество попыток, наверное, не так важно

Для нас это неважно :) Главное, что попытался, сколько раз — не интересно :)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для makishvili.com:

Женя, ты хитрый лис :)
А я ломал голову, как навесить счётчики на печать.

Интересно, что ты такое делаешь :)

spectator.ru 2013

...файл /user-tries-to-print-and-fails.php подгружает черный бэкграунд.

makishvili.com 2013

Комментарий для Евгения Степанищева:

Рефакторинг страницы печати Я.Карт :)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для spectator.ru:

...файл /user-tries-to-print-and-fails.php подгружает черный бэкграунд.

Обычно это проще делают.
@media print {
    * { display: none; }
}

Иван 2013

Уточните, запрос выполнится при открытии диалога печати или после того, как пользователь нажал кнопку «Печать»?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Иван:

Уточните, запрос выполнится при открытии диалога печати или после того, как пользователь нажал кнопку «Печать»?

Где как. Зависит от браузера и есть ли у него предосмотр документа.

Сергей 2013

А как же настройка «Печатать фоновые изображения» или подобная?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Сергей:

А браузерам пофигу, они всё равно грузят.

dinoelq 2013

красиво )