Я согласен, что действительно должен быть какой-то сигнал, который вы можете подключить, чтобы знать, когда приложение переходит в спящий режим и когда оно просыпается, но вы должны быть в состоянии выяснить, когда Safari просыпается косвенно.
Когда веб-просмотр переходит в фоновый режим, Safari укладывает все в него для сна. Он приостанавливает любое видео, откладывает сетевой запрос, прекращает обновление интерфейса и приостанавливает все операции setInterval / setTimeout. Сам JS никогда не узнает (насколько я могу судить), как эти вещи произошли, но он может сказать, что это произошло. Самый простой способ использовать это - создать регулярно вызываемый метод и проверить, не было ли неожиданно долгого времени с момента последнего обновления. Если вы ожидаете, что что-то будет обновляться каждые 10 секунд, а прошло пять минут, вы можете быть уверены, что устройство проснулось. Вот быстрый пример, который я придумал:
var intTime = new Date().getTime();
var getTime = function() {
var intNow = new Date().getTime();
if (intNow - intTime > 1000) {
console.log("I JUST WOKE UP")
}
intTime = intNow;
setTimeout(getTime,500);
};
getTime();
Это обнаружит, когда пользователь вернулся с другой вкладки, отклонил консоль разработчика или вернул Safari из фона. Я установил интервал в полсекунды; Вы можете установить его на что угодно, хотя я думаю, что очень низкие значения будут иметь проблемы с параллелизмом и, вероятно, излишне сожгут аккумулятор на устройстве.