如果当前未显示页面,是否在移动设备上不执行javascript?
我正在跟踪用户在我的网站上阅读内容的时间。考虑到用户实际上正在阅读,我在页面加载后10秒钟做了第一个Ajax请求。然后,我设置如果当前未显示页面,是否在移动设备上不执行javascript?,javascript,android,ios,ajax,Javascript,Android,Ios,Ajax,我正在跟踪用户在我的网站上阅读内容的时间。考虑到用户实际上正在阅读,我在页面加载后10秒钟做了第一个Ajax请求。然后,我设置beforeunload事件来触发另一个ajax请求,以通知用户已完成阅读 当用户在另一个选项卡中打开另一个页面时会出现问题,但我正在跟踪的页面没有关闭,因此我在10分钟后设置I定时器以触发结束读取ajax,并在卸载之前取消设置。这使得浏览器在页面打开但选项卡尚未关闭时发送信号 然而,我注意到,在移动设备(Android、iPhone和iPad)上,设置为10分钟后自动通
beforeunload
事件来触发另一个ajax请求,以通知用户已完成阅读
当用户在另一个选项卡中打开另一个页面时会出现问题,但我正在跟踪的页面没有关闭,因此我在10分钟后设置I定时器以触发结束读取ajax,并在卸载之前取消设置。这使得浏览器在页面打开但选项卡尚未关闭时发送信号
然而,我注意到,在移动设备(Android、iPhone和iPad)上,设置为10分钟后自动通知完成读取的计时器没有执行。因此,我想知道:当页面没有显示在屏幕上时,移动设备会停止执行javascript以节省电池吗?如果是,即使页面没有显示(但仍然打开),我如何运行计时器并触发ajax请求
使用requestAnimationFrame代替setTimeout
根据规范,当窗口未处于焦点时,此函数将不会调用
详情如下:
它被传递一个当前运行时间的int,因此您的函数应该检查这个int,并且只每隔这么多秒发送一个ajax请求
回答“我可以将此用于非动画”问题:
当然,你可以用它做任何你想要的。另一种选择
var lastUsageTime = 0;
var lastSentTime = 0;
window.requestAnimationFrame(function(t){
lastUsageTime = t;
});
setTimeout(function(){
if(lastUsageTime - lastSentTime > 10000){
//do ajax
lastSentTime = lastUsageTime
}
});
如我所见,这似乎用于动画,但我需要它来改变Ajax调用。在我的情况下使用这个函数安全吗?此外,这似乎是一个循环,但我根本不需要循环。我只需要在固定时间后执行一次代码。
var lastUsageTime = 0;
var lastSentTime = 0;
window.requestAnimationFrame(function(t){
lastUsageTime = t;
});
setTimeout(function(){
if(lastUsageTime - lastSentTime > 10000){
//do ajax
lastSentTime = lastUsageTime
}
});