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"
Удачи!!!
Ответ 4
Почему бы вам не попробовать, проверьте текущую текущую вкладку браузера или нет, и на основе этого условия сделайте свой материал. см. это лучшее решение
Есть ли способ определить, не открыто ли окно браузера?
но я не уверен, что это полезно для браузера ios.