jquery – 如何检测移动设备上的浏览器?

我正在开发的应用程序是基于jQuery Mobile和一些Ajax来刷新页面的部分.像使用自动刷新的网站一样,我想在一些条件(时间/可见性等)之后停止刷新,所以我的服务器不会被不必要的请求轰炸.应用程序具有通常由用户检查的状态屏幕,理想情况下,我的脚本将知道浏览器窗口已经成为焦点,这将是一个很好的刷新时间.我以前在桌面webapps中做到这一点,但我注意到不同平台和浏览器之间的移动端有很多变化,例如:

> window.onfocus()在浏览器获取焦点时/不会触发
>当浏览器中的标签页被切换时,window.onfocus()不会触发/不触发
>在浏览器之间的标签开关和/或开关之间没有挂起Javascript

迄今为止,我所能做的最好的一组启发式方法是在检测到用户页面进行交互时查看可用的事件,但是它很笨重,并且会导致用户跳回到页面并且必须手动刷新.不是很好.

任何聪明的技巧来解决这个问题?

解决方法

如果您只想知道浏览器窗口是否已经失焦,请使用requestAnimationFrame函数.
window.requestAnimFrame = window.requestAnimationFrame ||
                          window.mozRequestAnimationFrame || 
                          <add browsers here>

然后在你的代码

var lastupdate = new Date()
(function loop() {
      var now = new Date();

      if ( now - lastupdate > <some treshold like 1 second> ) {
          // browser was suspended and did come back to focus
      }
      lastupdate = now;

      window.requestAnimFrame(loop);
})();

技巧是,如果标签或窗口失焦,则浏览器不会给出动画框架.正常的setInterval和setTimeouts仍然可以正常工作.当窗口在焦点上时,此循环将持续运行,但开销最小,在移动设备中每秒钟可能会调整3-5次.

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...