苹果的iPad Mini在很多方面都是iPad 2的小复制品。在JavaScript中,是窗口。navigator对象为Mini和iPad 2暴露相同的值。到目前为止,我为检测差异而进行的测试还没有成功。

为什么这很重要?

由于iPad Mini和iPad 2的屏幕像素相同,但实际尺寸(英寸/厘米)不同,它们的PPI(每英寸像素)也不同。

为了提供友好的用户界面,web应用程序和游戏会根据用户的拇指或手指位置调整某些元素的大小,因此,我们可能想要缩放某些图像或按钮以提供更好的用户体验。

到目前为止我尝试过的事情(包括一些非常明显的方法):

window.devicepixelratio CSS元素宽度,单位为cm CSS媒体查询(如分辨率和-webkit-device-pixel-ratio) SVG图形在类似的单位 在设定的时间内进行各种CSS webkit转换,并使用requestAnimFrame计算呈现的帧数(我希望检测到可测量的差异)

我没办法了。你呢?

更新 谢谢你的回复。我想对那些投票反对检测iPad mini和iPad 2的人发表评论,因为苹果有一个规则。好吧,这是我的理由,为什么我觉得知道一个人用的是iPad mini还是iPad 2真的很有意义。随你怎么解释我的推理。

The iPad mini is not only a much smaller device (9.7 inch versus 7.9 inch), but its form factor allows for a different usage. The iPad 2 is usually held with two hands when gaming unless you're Chuck Norris. The mini is smaller, but it is also much lighter and allows for gameplay where you hold it in one hand and use another to swipe or tap or whatnot. As a game designer and developer myself, I'd just like to know if it's a mini so I can choose to provide the player with a different controlscheme if I want (for instance after A/B testing with a group of players).

为什么?事实证明,大多数用户倾向于使用默认设置,所以当玩家第一次加载游戏时,不要使用虚拟拇指杆,而是在屏幕上放置一些基于点击的控制,这是我和其他游戏设计师希望能够做到的。

所以恕我说,这超出了粗手指/指导方针的讨论,这是苹果和所有其他供应商应该做的事情:允许我们唯一地识别你的设备,以不同的方式思考,而不是遵循指导方针。


当前回答

这并不是对你提出的问题的回答,但我希望这比说“不要这样做”更有用:

与其检测iPad Mini,为什么不检测用户很难点击控件(或者:总是在控件的子区域中点击),然后增加/缩小控件的大小来适应他们呢?

对于需要更大控件的用户来说,不管使用什么硬件,他们都可以获得这些控件;那些不需要更大的控制和想要看到更多内容的用户也可以得到。这不像检测硬件那么简单,还有一些细微的事情需要做对,但如果做得仔细的话,效果会很好。

其他回答

基于Douglas关于iPad 2上的新webkitAudioContext().destination. numberofchannels的问题,我决定运行一些测试。

检查numberOfChannels在iPad mini上返回2,但在iPad 2、iOS 5和iOS 6上没有返回2。

然后我试着检查webkitAudioContext是否可用

var hasWebkitAudio = typeof(webkitAudioContext) === "object";
alert(hasWebkitAudio);​

同样,iPad Mini和iPad 2在iOS 6下返回true,而iPad 2在iOS 5下返回false。

(这个测试不适用于桌面,用于桌面检查webkitAudioContext是否是一个函数)。

下面是供您尝试的代码:http://jsfiddle.net/sqFbc/

我知道这可能是一个低技术含量的解决方案,但由于我们似乎还没有想出任何其他方法。

我假设你已经检查了大多数其他设备,所以我认为以下场景是可能的。

你可以检查所有可能的最流行的设备,需要特殊的CSS/大小,如果它不匹配,要么假设它是iPad mini或简单地问用户?

// Device checks here
...
else {
  // it would probably be better to make this a nicer popup-thing
  var mini = prompt("Are you using a iPad mini? Press yes for a better user experience");
  // Store the result for future visits somehow.
}

我知道这看起来很愚蠢,但如果我们目前无法确定这款设备是iPad mini还是iPad 2,至少该网站在iPad mini设备做这些事情时是可用的。

你甚至可以这样说:

“为了给你最好的浏览体验,我们会检测你的设备类型,根据你的设备定制网站。不幸的是,由于限制,这并不总是可能的,我们目前无法通过使用这些方法来确定您使用的是iPad 2还是iPad mini。

为了获得最佳的浏览体验,请在下面选择您使用的设备。

此选项将被存储,以供将来在此设备上访问该网站时使用。

[] iPad 2 
[*] iPad mini
[] Ancient blackberry device

"

我并不完全了解在Javascript中客户端可以做什么,不可以做什么。我知道你可以得到一个用户的IP,但是可以得到一个用户的mac地址吗?iPad2和iPad mini的这些范围有什么不同吗?

是的,这是一个检查陀螺仪的好点。 你可以很容易地做到

https://developer.apple.com/documentation/webkitjs/devicemotionevent

或者类似的东西

window.ondevicemotion = function(event) {
    if (navigator.platform.indexOf("iPad") != -1 && window.devicePixelRatio == 1) {
        var version = "";
        if (event.acceleration) version = "iPad2";
        else version="iPad Mini";

        alert(version);
    }
    window.ondevicemotion = null;
}​

没有ipad来测试。

没有测试,但它可以不播放音频文件并检查平衡,而是收听麦克风,提取背景噪声,并计算其“颜色”(频率图)。如果IPad Mini的麦克风型号与IPad 2不同,那么它们的背景颜色应该有明显的不同,一些音频指纹识别技术可能会帮助你判断使用的是哪台设备。

我不认为这种方法可行,在这种特殊情况下不值得这么麻烦,但我认为指纹识别背景噪音可以用于某些应用程序,例如,当你在建筑物内时,它可以告诉你你在哪里。

不是回答问题,而是问题背后的问题:

您的目标是在更小的屏幕上改善用户体验。UI控件的外观是其中一部分。UX的另一部分是应用程序的响应方式。

如果你将响应点击的区域设置得足够大,以便在iPad Mini上对用户友好,同时保持UI控件的视觉表现足够小,以便在iPad上获得视觉上的愉悦,会怎样?

如果您已经收集了足够多不在可视区域的点击,您可以决定以可视的方式缩放UI控件。

作为奖励,这也适用于iPad上的大手。