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

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

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

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

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

Комментарии 15

Алексей № 1
«отправляет на принтер»? «печатает на принтере»?
Евгений Степанищев (bolknote.ru) автор № 2
Да, букву не допечатал. Исправлено.
makishvili (makishvili.com) № 5
Женя, ты хитрый лис :)
А я ломал голову, как навесить счётчики на печать.

Спасибо.
Евгений Степанищев (bolknote.ru) автор № 7
Женя, ты хитрый лис :)
А я ломал голову, как навесить счётчики на печать.

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

Линар № 4
здорово придумано
а при повторной печати (без перезагрузки страницы) отправляется запрос?
хотя количество попыток, наверное, не так важно
Евгений Степанищев (bolknote.ru) автор № 6
а при повторной печати (без перезагрузки страницы) отправляется запрос?
хотя количество попыток, наверное, не так важно

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

spectator.ru № 8
…файл /user-tries-to-print-and-fails.php подгружает черный бэкграунд.
Евгений Степанищев (bolknote.ru) автор № 10
…файл /user-tries-to-print-and-fails.php подгружает черный бэкграунд.

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

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

Рефакторинг страницы печати Я.Карт :)
Иван № 11
Уточните, запрос выполнится при открытии диалога печати или после того, как пользователь нажал кнопку «Печать»?
Евгений Степанищев (bolknote.ru) автор № 12
Уточните, запрос выполнится при открытии диалога печати или после того, как пользователь нажал кнопку «Печать»?

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