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

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

Спасибо, Graham

19
задан Daniel Vassallo 2 February 2010 в 22:03
поделиться

6 ответов

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

2
ответ дан 30 November 2019 в 03:20
поделиться

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

Т.е. поддерживает два события с клиентами, которые вы можете обрабатывать: OnbeforePrint и OnafterPrint .

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

3
ответ дан 30 November 2019 в 03:20
поделиться

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

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

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

Попробуйте.

5
ответ дан 30 November 2019 в 03:20
поделиться

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

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

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

7
ответ дан 30 November 2019 в 03:20
поделиться

@Tahir Akhtar имел идею использования стилей для печати. Согласно комментариям, которые не работают, потому что таблица стилей всегда привлечена, независимо от того, находится ли браузер в настоящее время в представлении печати или нет.

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

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

Я думаю Список-стиль - изображение на абсолютно позиционированном, прозрачном

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

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

20
ответ дан 30 November 2019 в 03:20
поделиться

Вместо выполнения файла .reg необходимо внести изменения в реестр с помощью функциональных возможностей, предусмотренных в пространстве имен Microsoft.Win32 .

Довольно просто создать раздел реестра с помощью этого API:

RegistryKey key = Registry.CurrentUser.CreateSubKey("Names");
key.SetValue("Name", "Isabella");
key.Close();

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

Возможно, что более важно, API позволяет точно (в коде) указать, как обрабатывать случаи, когда вставляемые ключи уже существуют в реестре. Следует ли удалять существующие ключи и вставлять мои, обновлять значения внутри существующих ключей, молча игнорировать или создавать исключение?

-121--1325901-

Для разумной реализации Java:

Каждый объект имеет заголовок, содержащий, среди прочего, указатель на тип среды выполнения (например, Double или Последовательностей , но никогда не может быть CharSequence или AbstractList ). Предполагая, что компилятор среды выполнения (как правило, HotSpot в случае Sun) не может определить тип статически, некоторая проверка должна быть выполнена сгенерированным машинным кодом.

Сначала необходимо прочитать указатель на тип среды выполнения. Это в любом случае необходимо для вызова виртуального метода в подобной ситуации.

Для приведения к типу класса точно известно, сколько суперклассов существует, пока вы не нажмете java.lang.Object , так что тип может быть считан с постоянным смещением от указателя типа (фактически первые восемь в HotSpot). Опять же, это аналогично считыванию указателя метода для виртуального метода.

Тогда считанное значение просто требует сравнения с ожидаемым статическим типом приведения. В зависимости от архитектуры набора команд другая команда должна перейти (или выйти из строя) на неправильную ветвь. ISA, такие как 32-разрядные ARM, имеют условную инструкцию и могут иметь возможность прохождения печального пути через счастливый путь.

Интерфейсы являются более сложными из-за множественного наследования интерфейса. Как правило, последние две операции с интерфейсами кэшируются во время выполнения. В САМЫЕ ранние дни (более десяти лет назад) интерфейсы были немного медленными, но это уже не актуально.

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

-121--757853-

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

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

1
ответ дан 30 November 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: