Работа в режиме ожидания на iPad с использованием Javascript

Что касается событий iPad, как определить, меняется ли iPad при переходе из состояния готовности в состояние ожидания?

Что бы я хотел сделать, это перевести мое приложение Mobile-Safari в заблокированное состояние, когда iPad становится неактивным/резервным и запрашивает PIN-код, когда он снова проснется.

Ответ 1

Я согласен с тем, что действительно должен быть какой-то сигнал, с помощью которого вы можете узнать, когда приложение ложится спать и когда оно просыпается, но вы должны быть в состоянии выяснить, когда 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 из фона. Я установил интервал в полсекунды; вы можете установить его на все, что вам нужно, хотя я думаю, что очень низкие значения будут иметь проблемы concurrency и, вероятно, будут без необходимости перезаряжать батарею на устройстве.

Ответ 2

У Mobile Safari нет доступа к этому уровню состояния оборудования. Самое большее, что я думаю, это ускоритель.

Ответ 3

Одним из возможных решений, которые работали для меня, является использование

$(window).on('blur', function(){});