Есть ли способ отслеживать, если пользователь печатает веб-страницу?
Есть ли способ отслеживать, печатает ли пользователь веб-страницу?
Спасибо,
Graham
Ответы
Ответ 1
@Tahir Akhtar имел идею использования таблицы стилей печати. Согласно комментариям, это не работает, потому что таблица стилей всегда извлекается, независимо от того, находится ли браузер в настоящее время в режиме просмотра или нет.
Как насчет этого: используйте таблицу стилей печати и определите стиль в ней, который заставляет браузер извлекать определенный ресурс при его рендеринге. Ресурс вернет прозрачный образ.
Что касается выбора свойства CSS, background-image
отсутствует, потому что они обычно не отображаются браузером. Моя мысль была бы list-style-image
или cursor
.
Я думаю, что list-style-image
на абсолютно позиционированном, прозрачном <ul>
может сделать трюк без визуального изменения чего-либо (я бы не осмелился позиционировать элемент вне страницы из-за возможности оптимизации браузера). Каждый доступ к этому ресурсу должен поступать от печати страницы или предварительного просмотра.
Я не могу проверить это прямо сейчас, может быть, позже. Если кто-нибудь его попробует, мне будет интересно узнать, работает ли он.
Ответ 2
В Internet Explorer 5+ вы можете использовать событие onafterprint
, чтобы запускать запрос AJAX каждый раз, когда страница печатается. Если вы используете jQuery, вы можете сделать следующее:
window.onafterprint = function()
{
$.post("increment_print_counter.php");
};
Тогда, возможно, вы можете использовать некоторую статистику для оценки количества раз, когда она была напечатана из других браузеров!
Ответ 3
Я не знаю, когда браузеры получат CSS, когда вы укажете их со значением media = "print"
<link rel="stylesheet" type"text/css"
href="print.css" media="print">
Если они извлекают его только тогда, когда пользователь пытается распечатать документ, вы можете попробовать уловку на стороне сервера, чтобы отслеживать ее.
Попробуй.
Ответ 4
Вы можете добиться этого только в IE.
IE поддерживает два клиентских события, которые вы можете обрабатывать: onbeforeprint
и onafterprint
.
Вы можете добавить запрос AJAX в любое событие, которое вызовет серверную страницу, чтобы, скажем, увеличить счетчик PagePrinted в базе данных.
Ответ 5
Для поддержки кросс-браузера, только если вы предлагаете управлять печатью, например, добавив кнопку "отображать в печатном формате", которая, как минимум, покажет вам намерение распечатать страницу. Тем не менее, вы не сможете остановить пользователя от печати обычными средствами или обнаруживать, когда страница печатается.
Ответ 6
Вы также можете добавить на страницу большую, очевидную кнопку "Печать", которая запускает window.print
и выполняет запрос AJAX, если onafterprint
не доступен.
Он не дал бы вам никакой статистики о пользователях, которые просто нажимают Ctrl + P (и arent на IE), конечно, но это дает вам что-то (если вы не против наклеить кнопку "Печать" на странице).
Ответ 7
- Отключить печать с помощью CSS (без отображения на теге тела)
- У вас есть кнопка печати на странице, открывающей новую страницу для печати. Затем вы можете связать этот URL с пользователем (при условии, что у вас есть информация о них).
Ответ 8
Да, для большинства браузеров есть события, которые можно использовать для отслеживания запросов на печать.
- IE5 + поддерживает
window.onbeforeprint
и window.onafterprint
- Поддержка Chrome9 + и Safari5.1 +
window.matchMedia()
Подробнее см. TJ VanToll "Обнаружение запросов на печать с помощью JavaScript" в блоге.