IOS 5 приостанавливает JavaScript, когда вкладка не активна

У меня есть проблема, специфичная для iOS 5, и тот же код работает в iOS 4.X и других настольных браузерах.

Я использую JavaScript, чтобы делать некоторые вещи каждые несколько секунд, теперь проблема в том, что когда я переключаюсь на другую вкладку в сафари iPad, этот script перестает работать.

Когда я вернусь к этой вкладке, он снова начнет работать.

Вы можете воспроизвести его на этой странице, http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_infinite

Перейдите по этой ссылке, нажмите на начало подсчета и перейдите на другую вкладку браузера. Когда вы вернетесь на эту вкладку через несколько секунд, вы увидите, что счетчик не увеличился, когда вкладка неактивна.

Я думаю, что Apple сделала это для повышения производительности. Может кто-то предлагает решение, чтобы заставить его работать, я полностью застрял в этой проблеме?

Ответ 1

Если у вас есть счетчик, а не увеличивать его на 1 секунду, сохраните "время начала", а затем подсчитайте счет с этого времени. Вы все равно будете делать это каждую секунду, но он восстановится после периода паузы.

<div id="counter"></div>
<script>
var startTime = new Date();

var updateCounter = function () {
    var displayArea = document.getElementById("counter");
    var currentTime = new Date.now();
    var differenceInSeconds = Math.round((currentTime - startTime) / 1000);
    displayArea.innerHTML = differenceInSeconds ;
}

window.setInterval(updateCounter, 1000);
</script>

См. рабочий пример в JS Fiddle

UPDATE

Я только что протестировал iPad2 под управлением IOS5, и он определенно приостанавливает выполнение JavaScript на неактивных вкладках. Вы не сможете предотвратить это поведение, вам просто нужно будет с ним работать.

Просмотр тестовой страницы в JS Fiddle

Ответ 2

Это ничего нового для iOS 5. Mobile Safari всегда приостанавливал выполнение javascript для неактивных вкладок. Я знаю это из-за тестирования, которое я провел с сохранением записи координат геолокации год или два назад на веб-странице.

Ответ 3

У меня возникла проблема с iPad, когда была открыта новая вкладка. Я не смог поймать событие "focus", поэтому после поиска правильного события я обнаружил, что вы можете использовать: "pageshow"

Удачи!!!