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