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

5

有人在SO上提出了一个关于iPhone 4用户代理和iOS 5.0用户代理的问题

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

我想要区分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 是设备上物理像素与设备独立像素(dips)之间的比率。 window.devicePixelRatio = 物理像素 / dips。

更多信息在这里


1
@nhahtdh:好的,那是iOS 5.0的用户代理而不是iPhone 5。请记住,iOS 5.0可以在任何iOS设备上运行,包括iPhone 5,但是我想区分例如iPhone 4和iPhone 5之间的区别。 - fulvio
为什么你要评论然后投票关闭?还有,介意给出一个理由吗?@nhahtdh - fulvio
这是一种下意识的反应,没有仔细阅读你所询问的内容。 - nhahtdh
@nhahtdh:好的,那么关闭投票也是一时冲动吗? - fulvio
1
@JonathanGrynspan:我正在开发一个横向平台2D侧卷游戏,需要屏幕宽度。;-) 我想我已经回答了自己的问题。我将使用屏幕宽度进行检测。拍脸 - fulvio
显示剩余4条评论
2个回答

11

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

screen.availWidth
screen.availHeight

在我的iPhone 5上,它报告了320的宽度和548的高度,这是它非Retina形式下的分辨率。

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


那是568,不是548。 - ForNeVeR

3

只需两行:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接