пятница, 11 сентября 2026 г.
Почему HTML-таймер из чата не будит телефон, и что с этим делать
Войти
fedorovbtc
8 сен в 10:20
Почему HTML-таймер из чата не будит телефон, и что с этим делать
Простой
3 мин
4.4K
Разработка мобильных приложений
*
JavaScript
*
Веб-разработка
*
Кейс
Знакомый попросил ChatGPT написать ему интервальную тренировку: 40 секунд работа, 20 отдых, восемь кругов, одним HTML-файлом. Чат выдал нормальный код, в браузере всё бегает и пикает. Положил телефон на пол, начал отжиматься — тишина. Экран погас, и вместе с ним погас таймер.
Он спросил у чата «почему», и получил длинный список: PWA с Wake Lock, PWA с заранее склеенной аудиодорожкой (тишина → гонг → тишина → гонг), Capacitor, «соберите APK». Четыре совета, и три из них — обходные манёвры вокруг одного простого факта, который в туториалах обычно не пишут.
Веб-страница не умеет будильник
Не «пока не умеет», а по решению платформ. Пройдусь по механизмам, в которые все упираются:
setTimeout / setInterval живут, пока жива страница. Вкладка ушла в фон — таймеры троттлятся до раза в минуту, потом страница замораживается целиком. Safari на iOS делает это особенно охотно.
Notifications API умеет показать уведомление, но только пока страница или её service worker бодрствуют. Запланировать «покажи в 10:33» нельзя.
Notification Triggers — была ровно такая спецификация (showTrigger: new TimestampTrigger(t)). Chrome прогнал origin trial в 2020–2021 и закрыл проект. Нигде не вышло и не выйдет.
Service worker просыпается от push с сервера и засыпает через десятки секунд. Своего расписания у него нет.
Web Push работает, в том числе на iOS 16.4+ для PWA на главном экране. Но это сервер: HTTPS, VAPID, подписки, бэкенд, который в нужную секунду шлёт сообщение. Для продукта — нормально. Для таймера на сорок строк из чата — ну такое: чтобы телефон пикнул через 45 минут, нужно поднять и вечно крутить сервер.
Так что классический «будильник на HTML» — , цикл с new Date(), тег
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий