2013-01-21 13 views
11

Mögliche Duplizieren:
What is the Best way to do Browser Detection in Javascript?zuverlässig zu erkennen Desktop-vs. Mobile Browser

Ich möchte im Wesentlichen auf die folgenden (in JavaScript oder PHP) tun:

if (desktop browser) { 
    do x; 
} 
else { // mobile browser 
    do not do x; 
} 

Es ist bekannt, dass mit einem Browser detection method is not recommended. Eine bessere Lösung ist die Verwendung eines capability testing. Meine Frage ist, mit mobilen Browsern werden intelligenter und so mächtig wie die Desktop-Version, was ideal exklusive Fähigkeitsdetektion, um den Desktop von nicht-Desktop-Browsern zu filtern?

Ich denke, Umkehr der konditionalen Überprüfung, d. H. if (mobile browser) {} else ... könnte sich als problematischer erweisen, nicht wahr?

+3

Sie scheinen den Punkt der Feature-Erkennung zu verpassen. Der Punkt besteht darin, die Funktionen zu erkennen, die Ihnen wichtig sind, und nicht, wenn es sich um Mobile/Desktop handelt. – Quentin

+1

Danke, dass Sie darauf hingewiesen haben, @Quentin. Hoffentlich klärt dies andere auf, die dasselbe versuchen. – moey

+0

Verwandte: http://Stackoverflow.com/q/11381673 – moey

Antwort

13

Was für ein wenig Google-Suche aufgedreht, von A Beautiful Site:

var isMobile = { 
    Android: function() { 
     return navigator.userAgent.match(/Android/i); 
    }, 
    BlackBerry: function() { 
     return navigator.userAgent.match(/BlackBerry/i); 
    }, 
    iOS: function() { 
     return navigator.userAgent.match(/iPhone|iPad|iPod/i); 
    }, 
    Opera: function() { 
     return navigator.userAgent.match(/Opera Mini/i); 
    }, 
    Windows: function() { 
     return navigator.userAgent.match(/IEMobile/i); 
    }, 
    any: function() { 
     return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); 
    } 
}; 

if(isMobile.any()){ 
    // Mobile! 
} else { 
    // Not mobile 
} 

Ich will nicht, dass Feature-Erkennung ist Weise argumentieren vorzuziehen User-Agent-Sniffing, das ist eigentlich schrecklich. Wenn Sie jedoch feststellen, ob das Gerät als mobil gilt oder nicht, stellen Sie sich einer ganzen Reihe neuer Probleme aus.

Sie können pixel-ratio nicht überprüfen, da neue Desktopcomputer höchstwahrscheinlich "Retina" oder Super-HD sind. Sie können nicht device-orientation überprüfen, weil es nicht mehr einzigartig für Handys ist. Sie können das Gyroskop (wenn Sie können) nicht überprüfen, da ein Laptop möglicherweise Werte zurückgibt.

Erstellen Sie Websites, die auf allen Plattformen funktionieren, ohne sie zu trennen!

+0

Ich wollte gerade einen Kommentar hinzufügen, um es mit 'window.orientation' abzugleichen, aber anscheinend hast du darauf hingewiesen, dass es nicht länger exklusiv für mobile Geräte ist. Liegt es hauptsächlich an Windows 8? – moey

+0

Hauptsächlich ja. Aber der Punkt ist, dass wir (und mit ziemlicher Sicherheit) einen Markt haben werden, der sehr bald von orientierungsfähigen Geräten überflutet wird. Detecting * mobile * ist sinnlos und sollte als schlechte Praxis angesehen werden. –

+1

Es gibt verschiedene Implementierungen für das hier von @Remi vorgestellte Konzept: den 'navigator.userAgent' auszuwerten. Ich mag die Erinnerung, dass gegen etwas zu überprüfen, das verwendet wird, um spezifisch für Mobilgeräte zu sein, z. Die Geräteausrichtung ist möglicherweise bald nicht mehr gültig. – moey

0

Ich denke, Sie suchen nach der Funktion in PHP.

Es wird versucht, die Funktionen des Browsers des Benutzers zu ermitteln, indem die Informationen zum Browser in der Datei browscap.ini nachgeschlagen werden.