[Javascript] ¿Detecta usuarios de iPad que usan jQuery?



Answers

Aunque la solución aceptada es correcta para los iPhones, declarará incorrectamente que isiPhone e isiPad son ciertos para los usuarios que visitan su sitio en su iPad desde la aplicación de Facebook.

La sabiduría convencional es que los dispositivos iOS tienen un agente de usuario para Safari y un agente de usuario para UIWebView. Esta suposición es incorrecta ya que las aplicaciones iOS pueden personalizar su agente de usuario y lo hacen. El principal infractor aquí es Facebook.

Compare estas cadenas de agente de usuario desde dispositivos iOS:

# iOS Safari
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3
iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3

# UIWebView
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/98176
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117

# Facebook UIWebView
iPad: Mozilla/5.0 (iPad; U; CPU iPhone OS 5_1_1 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1.1;FBBV/4110.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.1.1;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0]
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; ru_RU) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1;FBBV/4100.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; tablet;FBLC/en_US]

Tenga en cuenta que en el iPad, la cadena de agente de usuario de Facebook UIWebView incluye 'iPhone'.

La antigua forma de identificar iPhone / iPad en JavaScript:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);

Si tuviera que utilizar este método para detectar iPhone y iPad, terminaría con IS_IPHONE e IS_IPAD siendo ciertos si un usuario proviene de Facebook en un iPad. ¡Eso podría crear un comportamiento extraño!

La forma correcta de identificar iPhone / iPad en JavaScript:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = (navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);
if (IS_IPAD) {
  IS_IPHONE = false;
}

Declaramos que IS_IPHONE es falso en iPads para cubrir el extraño agente de usuario de Facebook UIWebView iPad. Este es un ejemplo de cómo el rastreo de agente de usuario no es confiable. Cuantas más aplicaciones de iOS personalicen su agente de usuario, más problemas tendrá la detección de agente de usuario. Si puede evitar el rastreo de agente de usuario (sugerencia: Consultas de medios de CSS), HÁGALO.

Question

¿Hay alguna manera de detectar si el usuario actual está usando un iPad usando jQuery / JavaScript?




Yo uso esto:

function fnIsAppleMobile() 
{
    if (navigator && navigator.userAgent && navigator.userAgent != null) 
    {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var arrMatches = strUserAgent.match(/(iphone|ipod|ipad)/);
        if (arrMatches != null) 
             return true;
    } // End if (navigator && navigator.userAgent) 

    return false;
} // End Function fnIsAppleMobile


var bIsAppleMobile = fnIsAppleMobile(); // TODO: Write complaint to CrApple asking them why they don't update SquirrelFish with bugfixes, then remove



Links