我正在开发的应用程序是围绕jquerymobile和一些Ajax构建的,用于刷新页面的某些部分。与使用自动刷新的站点一样,我希望在出现某种情况(时间/可见性等)后停止刷新,这样我的服务器就不会受到不必要的请求的轰炸。应用程序有一个通常由用户检查的状态屏幕,理想情况下,我的脚本会知道浏览器窗口已进入焦点,这将是一个刷新的好时机。我以前在桌面webapps中也这样做过,但我注意到移动端在不同平台和浏览器之间存在很多差异,例如:
- 当浏览器获得焦点时,window.onfocus()不会/n触发
- 在浏览器中切换选项卡时,window.onfocus()不会/n触发
- Javascript不会在选项卡开关和/或远离浏览器的开关之间暂停
到目前为止,我所能做的最好的事情是一组启发式算法,当检测到用户与页面交互时,它会查看可用的事件+,但它很笨重,会导致用户跳回页面并手动刷新。不太好
有什么聪明的方法可以解决这个问题吗
如果您只想知道浏览器窗口是否已失焦,请使用requestAnimationFrame函数
window.requestAnimFrame=window.requestAnimationFrame||
window.mozRequestAnimationFrame | |
<;在此处添加浏览器>;
然后在代码中
var lastupdate=new Date()
(函数循环(){
var now=新日期();
如果(现在-最新更新>;<;有些树像1秒>;){
//浏览器已挂起,并已恢复焦点
}
lastupdate=now;
窗口帧(循环);
})();
诀窍在于,若标签或窗口不对焦,浏览器不会给出动画帧。正常设置间隔和设置超时仍然有效。当窗口处于焦点时,此循环将持续运行,但开销最小,在移动设备中可能每秒调用3-5次