我正在跟踪用户在我网站上阅读内容的时间。要考虑用户实际上正在阅读,我会在加载页面10秒后执行第一个ajax请求。然后,我设置beforeunload
事件以触发另一个ajax请求,以通知用户已完成阅读。
当用户在另一个标签中打开另一个页面时出现问题,但我正在跟踪的页面未关闭,因此我在10分钟后设置I计时器以触发结束读取ajax并取消设置{{1} }。这使浏览器在页面打开时发送信号,但标签尚未关闭。
然而,我注意到在移动设备(Android,iPhone和iPad)上,定时器设置为在10分钟后自动注意完成读取未执行。所以,我想知道:当屏幕上没有显示页面时,移动设备是否停止执行javascript以节省电量?如果是这样,我怎么能运行计时器并触发ajax请求即使页面未显示(但仍然打开)?
beforeunload
答案 0 :(得分:0)
而不是setTimeout使用requestAnimationFrame
https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame
按照规范,当窗口未对焦时,此功能不会调用。
http://caniuse.com/requestanimationframe
此处有更多详情:
http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/
传递一个当前运行时间的int,所以你的函数应该检查它,并且每隔很多秒才发送一个ajax请求。
回应'我可以将其用于非动画'问题:
绝对可以将它用于任何你想要的东西。另一种选择
var lastUsageTime = 0;
var lastSentTime = 0;
window.requestAnimationFrame(function(t){
lastUsageTime = t;
});
setTimeout(function(){
if(lastUsageTime - lastSentTime > 10000){
//do ajax
lastSentTime = lastUsageTime
}
});