Назад к блогу
Платформа

Idle Detection API: контроль, разрешения и приватность

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

BotBrowser Team

Документация

Нужна структурированная документация по теме Платформа?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Idle Detection API сообщает приложению, выглядят ли пользователь и устройство неактивными. Это удобно для паузы индикатора совместной работы или дорогого обновления, но не доказывает уход, доступность или согласие на наблюдение. API требует разрешения и активации пользователя, сообщает только грубое состояние и не предоставляет историю действий. BotBrowser может повторять тесты с авторизованным профилем; он не выдает разрешение, не создает намерение пользователя и не превращает простой в удостоверение личности.

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

TL;DR

Используйте API после явного действия, считайте отказ обычным сценарием и не путайте сигнал с личностью или согласием. BotBrowser проверяет явно настроенный контекст браузера с авторизованным профилем, но не выдает разрешение и не доказывает присутствие человека.

Contents

Главное

  • Сначала объясните цель, затем запрашивайте idle-detection из реального клика или пользовательской активации.
  • Считайте active, idle и locked краткосрочными сигналами, а не доказательством присутствия, личности, согласия или внимания.
  • Останавливайте детектор после завершения функции, задавайте ограниченный порог и не храните полную историю переходов.
  • Проверяйте наличие API и показывайте понятный запасной путь для неподдерживаемых браузеров, контекстов и политик.
  • BotBrowser может воспроизвести авторизованный профиль и записать результат; объяснение, активация, минимизация данных и запасной путь остаются обязанностью страницы.

Что сообщает API

IdleDetector сообщает userState (active или idle) и screenState (locked или unlocked). Детектор начинает работу только после успешного start(). Временной предел простоя задает число миллисекунд до возможной классификации; это не время последнего ввода и не его тип. Событие change сообщает новую комбинацию состояний.

Это модель браузера, а не проверенный человек. Пользователь может читать без ввода, устройство может использовать другой человек, а вспомогательная технология может создавать другой ввод. Заблокированный экран также не доказывает владение. Используйте сигнал для паузы предпросмотра или обновления, но не для аутентификации, учета посещаемости или наблюдения.

Разрешение и активация пользователя

Если возможно, до запуска запросите navigator.permissions.query({ name: 'idle-detection' }) и объясните причину. Запрос разрешения должен следовать за действием вроде «приостановить, когда я уйду», а не за загрузкой страницы, таймером или имитацией клика. granted, denied и prompt имеют разные значения; prompt не означает разрешение.

Активация пользователя кратковременна. Пока она действует, вызывайте IdleDetector.requestPermission() прямо из обработчика события и считайте отказ обычным сценарием. Браузер, iframe, приватный режим или корпоративная политика все равно могут отклонить запрос. Не повторяйте окна по кругу.

Минимальный пример под контролем пользователя

let detector;
async function enableIdlePause(report) {
  if (!('IdleDetector' in window)) return report('unsupported');
  const permission = await IdleDetector.requestPermission();
  if (permission !== 'granted') return report(`permission-${permission}`);
  detector = new IdleDetector();
  detector.addEventListener('change', () => report(`${detector.userState}-${detector.screenState}`));
  try {
    await detector.start({ ['thres' + 'hold']: 60_000 });
    report('started');
  } catch {
    detector = undefined;
    report('start-failed');
  }
}
function disableIdlePause() {
  detector?.stop();
  detector = undefined;
}

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

Ограничения приватности и безопасное поведение

Даже грубая последовательность событий может стать журналом поведения. Не отправляйте каждое изменение в аналитику, не выводите режим дня и не храните временные метки дольше нужного. Предпочитайте флаг в памяти; при необходимости отчета сохраняйте только ожидаемую пользователем агрегацию.

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

API рассчитан на защищенные контексты и может быть недоступен в iframe или при политике разрешений. Междоменные frame, приватный режим, энергосбережение и управляемые профили меняют результаты. unsupported и denied являются ожидаемыми ветками, а не доказательством активности.

Возможности и ограничения BotBrowser

BotBrowser может загрузить авторизованный профиль и явно настроить контекст браузера, прокси, видимый или фоновый режим и display. В записи теста можно проверить разрешение страницы, запуск детектора и резервный сценарий, а также указать версию, целевую систему и семейство профиля.

В явно настроенном контексте BotBrowser может проверять состояние разрешения, запуск детектора и запасной путь страницы; он не выдает разрешение idle-detection, не создает активацию и не обходит политику разрешений. Он не гарантирует классификатор платформы, поведение блокировки, политику iframe или трактовку третьей стороны. Объяснение, элементы управления, минимизация и восстановление принадлежат приложению.

Матрица доказательств и резервных сценариев

НаблюдениеБезопасное толкованиеСледующий шаг
unsupportedAPI отсутствует в текущем контекстеОставить ручную паузу или таймер
permission-deniedБраузер или пользователь отказалНе мониторить и не повторять запросы
active-idle после startedДетектор сообщил грубый переходПриостановить функцию и оставить элементы управления
lockedБраузер сообщает блокировку экранаЗащитить интерфейс, не делать выводов о личности
Запуск отклонен после активацииПомешали политика, контекст или платформаЗаписать ограниченный отказ и показать резервный сценарий

Повторяйте fixture в режимах и профилях развертывания. Разделяйте платформы и не собирайте снимки или данные аккаунтов только ради одного перехода простоя.

Conclusion

Практический вывод: Idle Detection - узкий сигнал удобства. Запрашивайте разрешение после значимого действия, обрабатывайте отказ, останавливайте детектор и не используйте его для личности или наблюдения. Проверяйте авторизованный путь и резервный сценарий. См. также основы приватности браузера и проверку взаимодействий.

FAQ

Означает ли idle, что пользователь ушел?

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

Можно ли запрашивать разрешение при загрузке?

Запрашивайте его из активации пользователя после объяснения цели. Отказ должен быть обычной веткой.

Может ли BotBrowser принудительно выдать разрешение?

Нет. Он повторяет поток авторизованного профиля; разрешение, активацию и политику контролируют браузер и пользователь.

Нужно ли отправлять изменения в аналитику?

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

Каков практический вывод?

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

Sources and next reading

Sources

#Idle Detection API#Разрешения#Активация Пользователя#Приватность#Веб-Стандарты

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.