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

时间:2014-02-26 17:12:19

标签: javascript android ios ajax

我正在跟踪用户在我网站上阅读内容的时间。要考虑用户实际上正在阅读,我会在加载页面10秒后执行第一个ajax请求。然后,我设置beforeunload事件以触发另一个ajax请求,以通知用户已完成阅读。

当用户在另一个标签中打开另一个页面时出现问题,但我正在跟踪的页面未关闭,因此我在10分钟后设置I计时器以触发结束读取ajax并取消设置{{1} }。这使浏览器在页面打开时发送信号,但标签尚未关闭。

然而,我注意到在移动设备(Android,iPhone和iPad)上,定时器设置为在10分钟后自动注意完成读取未执行。所以,我想知道:当屏幕上没有显示页面时,移动设备是否停止执行javascript以节省电量?如果是这样,我怎么能运行计时器并触发ajax请求即使页面未显示(但仍然打开)?

beforeunload

1 个答案:

答案 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
 }
});