Захватить Время Открытия Сценария
Привет всем.
Я пытаюсь создать проект, чья функция заключается в определении времени, что страница открыта (например, если был 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>
При запуске страницы, ничего не происходит!
и Я собрал этот франкенштейн-коды некоторых форумах, может кто-нибудь мне помочь исправить?
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