检测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。
你为什么不检测基于屏幕对象 -
screen.availWidth
screen.availHeight
在我的iPhone 5会报告320的宽度和高度548,这是其在非视网膜分辨率的形式。
由于报告视口大小,您不应该使用window.innerWidth和window.innerHeight。如果页面放大,它将报告放大区域的大小,而不是可用屏幕的正确大小。
这是568,而不是548. – ForNeVeR
2行是不够的:
var iphone4 = (window.screen.height == (960/2));
var iphone5 = (window.screen.height == (1136/2));
您还需要用户代理检测。仅仅屏幕尺寸是不够的。 –
@nhahtdh:嗯,这是iOS的5.0用户代理不是iPhone 5,记住,的iOS 5.0可以在任何iOS设备上运行,包括iPhone 5,不过我会例如区分iPhone 4和iPhone 5。 – fuzz
@nhahtdh:你为什么要评论然后投票结束?另外,谨慎给出一个理由? – fuzz
这是一个膝盖反应反应,没有仔细阅读你在问什么。 – nhahtdh