如何检测移动设备上的浏览器焦点?

我正在开发的应用程序是围绕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次

发表评论