2012-09-20 7 views
5

Eine question wurde über den Benutzer-Agent für iPhone 4 und den Benutzer-Agent iOS 5.0 bei SO gefragt.Erkennung von iPhone 5 und einem darunter befindlichen iOS-Gerät

Ich verwende Folgendes, um verschiedene mobile Geräte, Ansichtsfenster und Bildschirm zu erkennen.

Ich möchte in der Lage sein, zwischen dem iPhone 5 und allen anderen iOS-Geräten zu unterscheiden. Soweit ich weiß, würde die Zeile, die ich benutze, um den iOS 5.0 User Agent var iPhone5 zu finden, auch auf jedes iOS Gerät mit iOS 5.0 angewendet werden, also technisch ist es falsch.

var pixelRatio = window.devicePixelRatio || 1; 

var viewport = { 
    width: window.innerWidth, 
    height: window.innerHeight 
}; 

var screen = { 
    width: window.screen.availWidth * pixelRatio, 
    height: window.screen.availHeight * pixelRatio 
}; 

var iPhone = /iPhone/i.test(navigator.userAgent); 
var iPhone4 = (iPhone && pixelRatio == 2); 
var iPhone5 = /iPhone OS 5_0/i.test(navigator.userAgent); // ? 
var iPad = /iPad/i.test(navigator.userAgent); 
var android = /android/i.test(navigator.userAgent); 
var webos = /hpwos/i.test(navigator.userAgent); 
var iOS = iPhone || iPad; 
var mobile = iOS || android || webos; 

window.devicePixelRatio ist das Verhältnis zwischen den physikalischen Pixeln und geräteunabhängigen Pixel (dips) auf dem Gerät. window.devicePixelRatio = physikalische Pixel/Dips.

Weitere Informationen here.

+1

@nhahtdh: Nun, dass der Benutzer 5.0 Agent iOS ist nicht das iPhone 5. Denken Sie daran, iOS 5.0 5 auf jedem iOS-Gerät mit dem iPhone laufen kann, jedoch würde ich gerne zum Beispiel zwischen einem iPhone 4 und einem iPhone 5 unterscheiden. – fuzz

+0

@nhahtdh: Warum würdest du kommentieren und dann schließen? Geben Sie auch einen Grund an? – fuzz

+0

Es war eine reflexartige Reaktion, ohne genau zu lesen, wonach Sie fragen. – nhahtdh

Antwort

11

Warum nicht auf dem Bildschirm Objekt detect basiert -

screen.availWidth 
screen.availHeight 

Auf meinem iPhone 5 meldet es 320 Breite und 548 Höhe, die ihre Auflösung in einer Nicht-Retina Form ist.

Sie sollten window.innerWidth und window.innerHeight nicht verwenden, da die Größe des Darstellungsbereichs gemeldet wird. Wenn die Seite gezoomt wird, wird die Größe des vergrößerten Bereichs und nicht die richtige Größe des verfügbaren Bildschirms angezeigt.

+0

Das ist 568, nicht 548. – ForNeVeR

2

2 Zeilen sind genug:

var iphone4 = (window.screen.height == (960/2)); 
var iphone5 = (window.screen.height == (1136/2)); 
+0

Sie benötigen auch User-Agent-Erkennung. Die Bildschirmgröße allein reicht nicht aus. –