IPad-Benutzer mit jQuery erkennen?

167

Gibt es eine Möglichkeit, mithilfe von jQuery / JavaScript festzustellen, ob der aktuelle Benutzer ein iPad verwendet?

SeanWM
quelle

Antworten:

317

iPad-Erkennung

Sie sollten in der Lage sein, einen iPad-Benutzer zu erkennen, indem Sie sich die userAgentEigenschaft ansehen :

var is_iPad = navigator.userAgent.match(/iPad/i) != null;

iPhone / iPod-Erkennung

Ebenso die platformEigenschaft, nach Geräten wie iPhones oder iPods zu suchen:

function is_iPhone_or_iPod(){
     return navigator.platform.match(/i(Phone|Pod))/i)
}

Anmerkungen

Während es funktioniert, sollten Sie generell vermeiden, eine browserspezifische Erkennung durchzuführen, da diese oft unzuverlässig ist (und gefälscht werden kann). In den meisten Fällen wird die tatsächliche Feature-Erkennung bevorzugt , die über eine Bibliothek wie Modernizr erfolgen kann .

Wie in Brennens Antwort ausgeführt , können Probleme auftreten, wenn diese Erkennung in der Facebook-App durchgeführt wird. Bitte lesen Sie seine Antwort zur Behandlung dieses Szenarios.

Ähnliche Resourcen

Rion Williams
quelle
9
haha, du machst einen Unterschied zwischen dem jQuery-Ansatz und dem Javascript-Ansatz?
Harmen
4
Warum hat dies 2 Daumen nach unten?
Rocket Hazmat
3
Gibt es eine Methode, um es anhand der Supportfunktionen zu erkennen, um den Navigator-Benutzeragenten nicht zu verwenden?
Albanx
6
Ein Tippfehler (sollte iPad statt iPod sein) "ein" nicht "o".
Satish
4
Danke Satish - ich hatte diesen Abschnitt für einen iPod vorgesehen. Ich habe es als Tangente an die ursprüngliche Frage aufgenommen.
Rion Williams
22

Obwohl die akzeptierte Lösung für iPhones korrekt ist, deklariert sie beide fälschlicherweise isiPhoneund isiPadgilt für Benutzer, die Ihre Website über die Facebook-App auf ihrem iPad besuchen.

Die übliche Weisheit ist, dass iOS-Geräte einen Benutzeragenten für Safari und einen Benutzeragenten für UIWebView haben. Diese Annahme ist falsch, da iOS-Apps ihren Benutzeragenten anpassen können und müssen. Der Haupttäter hier ist Facebook.

Vergleichen Sie diese Benutzeragentenzeichenfolgen von iOS-Geräten:

# 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]

Beachten Sie, dass auf dem iPad die Benutzeragentenzeichenfolge von Facebook UIWebView "iPhone" enthält.

Der alte Weg, um iPhone / iPad in JavaScript zu identifizieren:

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

Wenn Sie diesen Ansatz zur Erkennung von iPhone und iPad wählen würden, würden IS_IPHONE und IS_IPAD beide zutreffen, wenn ein Benutzer von Facebook auf einem iPad kommt. Das könnte ein merkwürdiges Verhalten hervorrufen!

Der richtige Weg, um iPhone / iPad in JavaScript zu identifizieren:

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;
}

Wir erklären IS_IPHONE auf iPads für falsch, um den bizarren Facebook UIWebView iPad-Benutzeragenten abzudecken. Dies ist ein Beispiel dafür, wie unzuverlässig das Schnüffeln von Benutzeragenten ist. Je mehr iOS-Apps ihren Benutzeragenten anpassen, desto mehr Probleme treten beim Schnüffeln von Benutzeragenten auf. Wenn Sie das Schnüffeln von Benutzeragenten vermeiden können (Hinweis: CSS-Medienabfragen), tun Sie es.

Brennan Moore
quelle
1
Sie können Ihr iPhone / iPod-Matching in einem einzigen regulären Ausdruck wie kombinieren /iPh?o(ne|d)/i, oder /(iPhone|iPod)/iwenn Sie über die Veröffentlichung eines iPhods nachdenken: P.
Cobby
9

Ich benutze das:

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
Stefan Steiger
quelle
Danke, es war genau das, wonach ich gesucht habe.
Techie_28
Auf dem Desktop schlägt dies fehl, da ich, wenn nichts gefunden werden kann, ein Objekt mit dem Inhalt null zurückgibt, die zweite Bedingung geändert habe und einwandfrei funktioniert: if (arrMatches! = Null) {return true; }
Joe L.
8

Ich benutze das:

//http://detectmobilebrowsers.com/ + tablets
(function(a) {
    if(/android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(ad|hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|playbook|silk/i.test(a)
    ||
    /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))
    {
        window.location="yourNewIndex.html"
    }
})(navigator.userAgent||navigator.vendor||window.opera);
Ntinos Koletsis
quelle