Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果当前未显示页面,是否在移动设备上不执行javascript?_Javascript_Android_Ios_Ajax - Fatal编程技术网

如果当前未显示页面,是否在移动设备上不执行javascript?

如果当前未显示页面,是否在移动设备上不执行javascript?,javascript,android,ios,ajax,Javascript,Android,Ios,Ajax,我正在跟踪用户在我的网站上阅读内容的时间。考虑到用户实际上正在阅读,我在页面加载后10秒钟做了第一个Ajax请求。然后,我设置beforeunload事件来触发另一个ajax请求,以通知用户已完成阅读 当用户在另一个选项卡中打开另一个页面时会出现问题,但我正在跟踪的页面没有关闭,因此我在10分钟后设置I定时器以触发结束读取ajax,并在卸载之前取消设置。这使得浏览器在页面打开但选项卡尚未关闭时发送信号 然而,我注意到,在移动设备(Android、iPhone和iPad)上,设置为10分钟后自动通

我正在跟踪用户在我的网站上阅读内容的时间。考虑到用户实际上正在阅读,我在页面加载后10秒钟做了第一个Ajax请求。然后,我设置
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
 }
});