iOS 5 приостанавливает JavaScript, когда вкладка не активна - PullRequest
4 голосов
/ 02 ноября 2011

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

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

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 02 ноября 2011

Если у вас есть счетчик, вместо того, чтобы увеличивать его на 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

ОБНОВЛЕНИЕ

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

Просмотреть тестовую страницу на JS Fiddle

1 голос
/ 02 ноября 2011

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

0 голосов
/ 12 июня 2014

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

Есть ли способ определить, не активно ли окно браузера в данный момент?

, но я не уверен, полезно ли оно для браузера ios.

0 голосов
/ 24 марта 2014

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

Удачи!!!

...