Как я могу запретить iPhone (включая iOS 7) переспать в HTML или JS?
Я пытаюсь написать код для сохранения телефона и не спать на веб-странице.
В моем поиске я нашел этот пост: Предотвратить переход на безопасное сафари iOS в режиме ожидания/автоматическое блокирование/сон?
Но петля аудиофайла, похоже, больше не поддерживает MobileSafari и препятствует блокировке телефона. Во время принудительного обновления страницы каждые 30 секунд мне нужно, чтобы исходная страница оставалась открытой.
Последнее интерактивное музыкальное видео Google, Just A Reflektor, похоже, предотвращает блокировку с мобильных устройств, а их JS здесь ссылается на функцию preventSleepIos.
Что я могу сделать, чтобы IOS не заснул?
Спасибо!
Ответы
Ответ 1
Если вы запустите миниатюрный script через http://jsbeautifier.org/, вы получите представление о том, как работает этот хак.
Идея взлома заключается в следующем: если в сафари запрашивается новая страница, ios-устройство будет reset таймаутом ожидания.
Зная, что мы можем установить интервал для запроса новой страницы каждые 30 секунд или около того:
iosSleepPreventInterval = setInterval(function () {
window.location.href = "/new/page";
}, 30000);
Теперь нам нужно остановить запрос, чтобы страница не перенаправлялась:
iosSleepPreventInterval = setInterval(function () {
window.location.href = "/new/page";
window.setTimeout(function () {
window.stop()
}, 0);
}, 30000);
Теперь на страницу будет отображаться запрос каждые 30 секунд, поэтому устройство ios не будет усыновлено, и запрос будет отменен, поэтому вы не удаляетесь от страницы.
Примечание. Я использую этот код для "/new/page":
sleep(10);exit;
Этот хак был протестирован на iOS 6 и iOS 7. Вы можете проверить его самостоятельно на jsBin.
Примечание2: Android использует разные хаки, чтобы предотвратить спящий режим.
Ответ 2
Вам нужно будет сделать запрос на сервер, что, к сожалению, невозможно с строго HTML или JS. Оба эти языка - это интерфейсные скриптовые языки, а это означает, что после загрузки DOM манипуляция с DOM с помощью ванильного HTML и CSS будет влиять только на интерфейс.
Насколько я знаю, существует всего несколько способов предотвратить переключение в систему iOS, одним из которых является создание игрушечного приложения, которое снова и снова запускает службу в iOS, а другое - устанавливать application.idleTimerDisabled = YES
, но оба этих решения выходят за рамки технологий веб-интерфейса.
Если вы хотите, чтобы сеанс не терялся через веб-приложение, вы могли бы написать дешевую функцию на стороне сервера, чтобы время ping время сервера было так часто, чтобы сохранить сеанс пользователя.
Пример использования javascript и PHP:
function cd(){
var alerttime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (1 * 60))); ?>"
var extratime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (2 * 60))); ?>";
redo();
}
function getTime(){
currenttime = "<?php echo date('h:i:s', time()); ?>";
var cd = setTimeout("getTime()",1000);
}