Регистрация на стороне сервера, когда кто-то печатает веб-страницу - PullRequest
4 голосов
/ 02 июня 2009

На моей работе нам интересно отслеживать, как часто люди печатают наши веб-страницы. (Если многие люди этим занимаются, мы, вероятно, уделим больше внимания повышению качества печати.)

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

Есть ли какой-нибудь умный способ использовать CSS только для печати, чтобы браузер выдавал веб-запрос только при печати? Кажется, мои эксперименты говорят «нет», но, похоже, это возможно.

Редактировать: ниже предлагается разумный ответ, который работает в FF; Я предлагаю вознаграждение в 100 баллов за решение, которое работает и в IE.

Ответы [ 7 ]

3 голосов
/ 10 июня 2009

Чтобы использовать ответы от Тайсона и Джао, вы можете попробовать этот подход, чтобы обойти проблему фоновых изображений, не отображаемых / печатаемых по умолчанию. вместо фонового изображения используйте изображение маркера ...

Вставьте элемент в ваш источник HTML, например:

<div id="print_tracker"><ul><li>&nbsp;</li></ul></div>

На вашем экране CSS:

@media screen {
    #print_tracker { display: none; }
}
@media print {
    #print_tracker { display: block; }
    #print_tracker UL { list-style-image: url(/images/printtracker.gif); }
}

Затем отследите попадания к этому изображению. Хаки ... я знаю

2 голосов
/ 02 июня 2009

Нет точного способа увидеть, когда страница печатается (и некоторые могут посчитать это вторжением в личную жизнь). Предложения по использованию отдельного print CSS работают, но они могут создать много ложных тревог - инструменты предварительного просмотра, предварительной выборки и зеркального отображения (даже wget) также запросят файл CSS, даже если они не собираются напечатать что-нибудь.

2 голосов
/ 02 июня 2009

Может быть, вы могли бы добавить фоновое изображение в файл print.css и связать это фоновое изображение с файлом на вашем сервере, который выполняет регистрацию.

Например:

body {background-image:url(http://www.example.com/printlogger.aspx);}

Я не уверен, что это работает, просто мысль

Обновление: Я только что попробовал выше. Счетчик увеличивается, если вы делаете предварительный просмотр. Однако это не происходит при обновлении счетчика при печати страницы (даже с отключенными фоновыми изображениями). Другим вариантом может быть использование свойства контента CSS.

ОБНОВЛЕНИЕ II Вы можете использовать свойство содержимого, работает в Firefox, а не в IE8. Я не проверял другие браузеры:

body
{
    content:url(http://www.example.com/Count.aspx);
}
1 голос
/ 10 июня 2009

Для IE, изучите использование связанных с печатью событий в теле документа.

window.onbeforeprint - срабатывает непосредственно перед печатью страницы window.onafterprint - Срабатывает сразу после загрузки страницы для печати в очередь / кэш принтера.

$ (function () {

    //Check to see if browser supports onbeforeprint (IE6, IE7 and IE8)
    if (window.onbeforeprint !== undefined) {
       window.onbeforeprint = TrackPrint;

    }

}); function TrackPrint(){
$.get("http://www.example.com/Count.aspx");}
1 голос
/ 02 июня 2009

Вы можете проверить, что ваш печатный CSS загружен (вы можете выбрать CSS для конкретного макета, используя медиа-селекторы) с помощью JavaScript. Затем javascript может зарегистрировать этот запрос на сервере.

1 голос
/ 02 июня 2009

Вставьте элемент в ваш источник HTML, например:

<div id="print_tracker"></div>

На вашем экране CSS:

#print_tracker { display: none }

(Это на самом деле не нужно, если у вас нет некоторых стилей по умолчанию для div, которые приводят к его размеру.)

В вашей распечатке CSS:

#print_css { display: block; height: 1px; background-image: url(clear.gif); }

Тогда просто отследите попадания к этому изображению.

0 голосов
/ 10 июня 2009

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

Что еще можно сделать, это примерно так:

  1. При загрузке страницы используйте javascript, чтобы добавить на страницу только для печати таблицу стилей, которая скрывает все, кроме сообщения «Пожалуйста, используйте ссылку для печати на этой странице».
    • Используйте здесь javascript, чтобы пользователи с отключенным JS могли печатать как обычно. Вы не сможете их зарегистрировать, но вы их и не разозлите.
  2. Поместите на страницу ссылку, которая при нажатии регистрирует событие через AJAX, удаляет эту таблицу стилей и затем вызывает window.print()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...