检测iPhone 5及其下面的任何iOS设备

问题描述:

在SO上询问有关iPhone 4用户代理和iOS 5.0用户代理的question检测iPhone 5及其下面的任何iOS设备

我使用以下来检测不同的移动设备,视口和屏幕。

我希望能够区分iPhone 5和所有其他iOS设备。据我所知,我用来检测iOS 5.0用户代理var iPhone5的线路也适用于任何运行iOS 5.0的iOS设备,因此在技术上它是不正确的。

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是物理像素和在设备上的与设备无关的像素(倾角)之间的比率。 window.devicePixelRatio =物理像素/骤降。

更多信息here

+1

@nhahtdh:嗯,这是iOS的5.0用户代理不是iPhone 5,记住,的iOS 5.0可以在任何iOS设备上运行,包括iPhone 5,不过我会例如区分iPhone 4和iPhone 5。 – fuzz

+0

@nhahtdh:你为什么要评论然后投票结束?另外,谨慎给出一个理由? – fuzz

+0

这是一个膝盖反应反应,没有仔细阅读你在问什么。 – nhahtdh

你为什么不检测基于屏幕对象 -

screen.availWidth 
screen.availHeight 

在我的iPhone 5会报告320的宽度和高度548,这是其在非视网膜分辨率的形式。

由于报告视口大小,您不应该使用window.innerWidth和window.innerHeight。如果页面放大,它将报告放大区域的大小,而不是可用屏幕的正确大小。

+0

这是568,而不是548. – ForNeVeR

2行是不够的:

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

您还需要用户代理检测。仅仅屏幕尺寸是不够的。 –