пятница, 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(), тег

Комментариев нет:

Отправить комментарий