Есть ли способ отследить, печатает ли пользователь веб-страницу? - PullRequest
17 голосов
/ 27 января 2010

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

Спасибо, Грэм

Ответы [ 8 ]

19 голосов
/ 31 января 2010

@ Тахир Ахтар задумал использовать таблицу стилей для печати. Согласно комментариям, это не работает, потому что таблица стилей всегда выбирается, независимо от того, находится ли браузер в данный момент в режиме печати или нет.

Как насчет этого: используйте таблицу стилей печати и определите в ней стиль, который заставляет браузер извлекать определенный ресурс, когда он отображается . Ресурс вернул бы прозрачное изображение.

Что касается выбора свойства CSS, background-image отсутствует, поскольку они обычно не отображаются браузером. Моя мысль была бы list-style-image или cursor.

Я думаю, list-style-image на абсолютно позиционированном, прозрачном <ul> мог бы добиться цели без визуального изменения чего-либо (я бы не посмел расположить элемент за пределами страницы из-за возможной оптимизации браузера, удаляющей его). Каждый доступ к этому ресурсу должен происходить от печати страницы или предварительного просмотра.

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

7 голосов
/ 27 января 2010

В Internet Explorer 5+ вы можете использовать событие onafterprint, чтобы запускать запрос AJAX при каждой печати страницы. Если вы используете jQuery , вы можете сделать следующее:

window.onafterprint = function()
{
    $.post("increment_print_counter.php");
};

Тогда, возможно, вы сможете использовать некоторую статистику, чтобы оценить, сколько раз она была напечатана из других браузеров!

5 голосов
/ 27 января 2010

Я не знаю, когда браузеры будут загружать CSS, когда вы указываете их с помощью media = "print"

<link rel="stylesheet" type"text/css"
     href="print.css" media="print">

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

Дай ему попробовать.

3 голосов
/ 27 января 2010

Вы можете достичь этого только в IE.

IE поддерживает два события на стороне клиента, которые вы можете обрабатывать: onbeforeprint и onafterprint.

Вы можете добавить запрос AJAX в любое событие, которое вызовет страницу на стороне сервера, скажем, для увеличения счетчика PagePrinted в базе данных.

2 голосов
/ 27 января 2010

Для кросс-браузерной поддержки, только если вы предлагаете управлять печатью, например, добавив кнопку «Показать в формате для печати», которая как минимум покажет вам намерение распечатать страницу. Однако вы не сможете остановить пользователя от печати обычными способами или определить, когда печатается страница.

1 голос
/ 08 мая 2013

Да, для большинства браузеров есть события, которые можно использовать для отслеживания запросов на печать.

  • IE5 + поддерживает window.onbeforeprint и window.onafterprint
  • Chrome9 + и Safari5.1 +support window.matchMedia()

Подробнее см. в блоге TJ VanToll "Обнаружение запросов на печать с помощью JavaScript" .

1 голос
/ 28 октября 2011
  1. Отключить печать с помощью CSS (без отображения тега body)
  2. Имейте кнопку печати на всплывающей странице, чтобы открыть новую страницу только для печати. Затем вы можете привязать этот URL к пользователю (при условии, что у вас есть некоторая информация о нем)
1 голос
/ 31 января 2010

Вы также можете добавить на страницу большую, очевидную кнопку «Печать», которая запускает window.print и выполняет запрос AJAX, если onafterprint недоступен.

Это не даст вам никакой статистики о пользователях, которые просто нажимают Ctrl + P (и не работают в IE), конечно, но это дает вам кое-что (если вы не против нажать кнопку «Печать» на странице).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...