Реальная проверка в вашем браузере

Экран нужен включённым

Выберите способ и включите удержание. Смена вкладки или уход со страницы выключают его; возвращение не запускает новый запрос.

Управление удержанием

NoSleep.js сначала использует системный API. Если его нет — пробует небольшой видеофрагмент.

Таймер начнётся после успешного запуска.

Среда
Проверяем…
Системный API
Проверяем…
Вкладка
Проверяем…
Проверяйте на устройстве. Принятый запрос не отменяет ограничения ОС, энергосбережения и браузера. Видеорежим особенно важно проверить на конкретном телефоне.

Наблюдайте за состоянием

Удержание выключено

Нажмите «Включить удержание», когда это нужно.

Текущий способ
Не запущен
Прошло времени
00:00
До отключения
—

Пример задачи, где это пригодится

ПрактикаШаг 1 из 3

Повторите шаг, не торопясь

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

Журнал событий 0
  1. Событий пока нет.

Проверьте на телефоне

Откройте по HTTPS

Для проверки удержания откройте этот стенд на своём телефоне в обычном браузере.

Включите и подождите

Выберите время отключения больше тайм-аута блокировки экрана. После запуска не касайтесь экрана.

Отключите и сравните

Нажмите «Выключить». Проверьте смену вкладки и режим энергосбережения: результат может отличаться.

Удержание расходует заряд. Включайте его на время реальной задачи и давайте человеку явную кнопку отключения.

Повторить в своём проекте

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

Пример подключения нашей оболочки
import { WakeController } from './lib/controller.js';
import { browserCapabilities, createNoSleepBackend } from './lib/backends.js';

const capabilities = () => browserCapabilities({ navigator, document, window });
let backend;
const screen = new WakeController({
  getCapabilities: capabilities,
  createBackend: () => backend ??= createNoSleepBackend(window.NoSleep, capabilities()),
  onChange: state => console.log(state.phase, state.message)
});

startButton.addEventListener('click', () => screen.start());
stopButton.addEventListener('click', () => screen.stop());
document.addEventListener('visibilitychange', () =>
  screen.visibilityChanged(document.visibilityState === 'visible'));
window.addEventListener('pagehide', () => screen.stop('pagehide'));
setInterval(() => screen.tick(), 1000);

Это оболочка демонстрации, а не дополнительный API NoSleep.js. Полный рабочий пример — в app.js; правила использования и запуск описаны в README.