Захватить Время Открытия Сценария


Привет всем.

Я пытаюсь создать проект, чья функция заключается в определении времени, что страница открыта (например, если был 1 или 2 минут). Когда будет закрыт, сохранить в базе данных информацию о времени.

Однако, я отказ с javascript, jquery и тому подобное. Ниже пример кода:

<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
  var aberturaPagina;
  $(window).ready(function () {
    aberturaPagina = new Date().getTime();
  });
  $(window).on('beforeunload', function () {
    var fechoPagina = new Date().getTime();
    var tempoAberto = (fechoPagina - aberturaPagina) / 1000;

    $.ajax({
      type : "POST",
      url : "http://url.exmplo.com.br/codigo_db.php?id=1&tempo=" + tempoAberto,
        sucess : function(html){
        $('.div').html(html);
      }
    })
  });
</script>

При запуске страницы, ничего не происходит!

и Я собрал этот франкенштейн-коды некоторых форумах, может кто-нибудь мне помочь исправить?

Author: Márcio Teixeira, 2016-02-18

1 answers

Браузеры игнорируют запросы асинхронные, начатые в событие unload. Есть как минимум два способа обойти это: сделать запрос синхронно, или использовать API - navigator.sendBacon. Последний не поддерживается в IE 11, но имеет преимущество асинхронный и не блокирует браузер во время запроса.

Пример запроса синхронно:

var aberturaPagina;

window.addEventListener('load', function () {
  aberturaPagina = new Date().getTime();
});

window.addEventListener('unload', function () {
  var fechoPagina = new Date().getTime();
  var tempoAberto = (fechoPagina - aberturaPagina) / 1000;
  var client = new XMLHttpRequest();
  client.open('POST', 'http://requestb.in/1a4i8zc1', false);
  client.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  client.send('id=1&tempo=' + tempoAberto);
}, true);

, Например, с sendBeacon:

var aberturaPagina;

window.addEventListener('load', function () {
  aberturaPagina = new Date().getTime();
});

window.addEventListener('unload', function () {
  var fechoPagina = new Date().getTime();
  var tempoAberto = (fechoPagina - aberturaPagina) / 1000;
  navigator.sendBeacon('http://requestb.in/1a4i8zc1', 'id=1&tempo=' + tempoAberto);
}, true);

Артикул

Https://developer.mozilla.org/pt-BR/docs/Web/API/Navigator/sendBeacon

 3
Author: jefersondaniel, 2016-02-18 23:59:18