我已经编写了以下Jquery,每3秒钟将一个Heartbeat发送回PHP,它运行正常。我这样做的原因是要了解用户当前登录和使用该网站的内容。
setInterval(function () {
$.post('includes/heartbeat.php', {'heartBeatConfirmation': '1'});
},3000);
我发现的问题是,当用户不看网站时,它会继续发出心跳 - 例如:他们仍然打开浏览器,但正在查看其他网页或做其他事情。
有没有办法更新这个,所以它只在用户使用网站时发送AJAX心跳?
答案 0 :(得分:1)
您可以检查窗口是否是焦点,只有焦点才能检测心跳。 试试这个:
$(window).focus(function() {
heartbeat = setInterval(function () {
$.post('includes/heartbeat.php', {'heartBeatConfirmation': '1'});
},3000);
})
.blur(function() {
clearInterval(heartbeat);
});
$(window).focus();
答案 1 :(得分:1)
$(document).ready(function(){
heartBeatInterval = null;
$(window).focus(function() {
if(heartBeatInterval == null){
heartBeatInterval = setInterval(function () {
$.post('includes/heartbeat.php',
{'heartBeatConfirmation': '1'}
);
console.log('We have the fouces of the active tab');
},1000);
}
});
$(window).blur(function() {
heartBeatInterval = null;
console.log('We have the lost the focus of the active tab');
});
});
答案 2 :(得分:1)
我想这只是一个品味问题:
$(window)
.on('mouseleave', function(){
clearInterval(inside);
})
.on('mouseenter', function(){
inside = setInterval(function () {
$.post('includes/heartbeat.php', {'heartBeatConfirmation': '1'})
}, 3000)
})
JSFIDDLE(提醒:window
是“结果”Frame
)。