Подтвердить что ты не робот

Событие Javascript для повторного запуска мобильного браузера или устройства

Утром все, я ищу какое-то Javascript-событие, которое я могу использовать, чтобы обнаружить, когда окно мобильного браузера восстанавливается, после того, как пользователь закрывает/сводит к минимуму их браузер (чтобы вернуться к главному экрану/другому приложению), или если устройство возобновляет спящий режим (либо пользователь отключает его, либо он переходит в режим сна после таймаута экрана).

Я бы хотел найти одно событие, которое работает на все, но я знаю, что маловероятно! Событие pageshow работает для устройств iOS, но оно довольно отрывочно для использования со всем остальным. Я пробовал focus и DOMActivate, но ни один из них не имеет желаемого эффекта.

На странице могут не всегда быть элементы формы, и я не хочу, чтобы пользователь снова коснулся страницы, чтобы вызвать событие.

Требование к такому событию вызвано тем, что наш код периодически проверяет новый контент, делая запросы XHR. Они никогда не отправляются, когда браузер спит, поэтому мы никогда не получаем новый контент для перезапуска тайм-аутов.

Спасибо за любую помощь, которую вы, ребята, сможете предоставить!

4b9b3361

Ответ 1

У нас была аналогичная проблема и он решил что-то вроде этого:

var lastSync = 0;
var syncInterval = 60000; //sync every minute

function syncPage() {
  lastSync = new Date().getTime(); //set last sync to be now
  updatePage(); //do your stuff
}

setInterval(function() {
  var now = new Date().getTime();
  if ((now - lastSync) > syncInterval ) {
    syncPage();
  }
}, 5000); //check every 5 seconds whether a minute has passed since last sync

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

Ответ 2

Лучше, чем интервал, будет добавление слушателя размытия окна и прослушивателя фокуса окна. На размытие записывайте текущее время. В фокусе убедитесь, что вы все еще вошли в систему/sync'd/что вам нужно сделать.

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

Обновление

var $window = $(window),
  $window.__INACTIVITY_THRESHOLD = 60000;

$window.add(document.body);  //necessary for mobile browsers

$window.declareActivity = function () { $window.__lastEvent = new Date(); };

$window.blur($window.declareActivity);
$window.focus(function(){
  var diff = (new Date()) - $window.__lastEvent;
  if (diff > $window.__INACTIVITY_THRESHOLD) { 
     $window.trigger("inactivity"); 
  }
});

$window.on("inactivity", "", null, function () {
  //your inactivity code
});

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

$(document.body).on("click scroll keyup", "", null, $window.declareActivity);

чтобы мой таймер бездействия работал, когда пользователь просто уходит. В зависимости от вашего сайта вы можете настроить этот точный список событий или просто вставить $window.declareActivity(); в ваши существующие сценарии, которые отвечают на пользовательские входы.