Обработка ожидания на iPad с использованием Javascript - PullRequest
14 голосов
/ 09 февраля 2011

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

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

Ответы [ 3 ]

32 голосов
/ 09 февраля 2011

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

1 голос
/ 09 февраля 2011

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

0 голосов
/ 20 января 2017

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

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