使用jQuery检测iPad用户?

2022-08-30 02:10:14

有没有办法检测当前用户是否正在使用jQuery / JavaScript的iPad?


答案 1

iPad Detection

您应该能够通过查看 userAgent 属性来检测 iPad 用户:

var is_iPad = navigator.userAgent.match(/iPad/i) != null;

苹果手机/苹果电脑检测

同样,用于检查 iPhone 或 iPod 等设备的平台属性:

function is_iPhone_or_iPod(){
     return navigator.platform.match(/i(Phone|Pod))/i)
}

笔记

虽然它有效,但通常应避免执行特定于浏览器的检测,因为它通常不可靠(并且可能是欺骗性的)。在大多数情况下,最好使用实际的特征检测,这可以通过像Modernizr这样的库来完成。

正如Brennen的答案中指出的那样,在Facebook应用程序中执行此检测时可能会出现问题。请参阅他处理这种情况的答案。

相关资源


答案 2

尽管接受的解决方案对于iPhone是正确的,但它会错误地声明两者,并且对于从Facebook应用程序在iPad上访问您网站的用户而言,它是正确的。isiPhoneisiPad

传统观点认为,iOS 设备具有 Safari 的用户代理和 UIWebView 的用户代理。这种假设是不正确的,因为iOS应用程序可以并且确实自定义其用户代理。这里的主要罪犯是Facebook。

比较 iOS 设备中的以下用户代理字符串:

# iOS Safari
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3
iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3

# UIWebView
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/98176
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117

# Facebook UIWebView
iPad: Mozilla/5.0 (iPad; U; CPU iPhone OS 5_1_1 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1.1;FBBV/4110.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.1.1;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0]
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; ru_RU) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1;FBBV/4100.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; tablet;FBLC/en_US]

请注意,在iPad上,Facebook UIWebView的用户代理字符串包括“iPhone”。

在JavaScript中识别iPhone / iPad的旧方法:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);

如果您要使用这种方法来检测iPhone和iPad,那么如果用户来自iPad上的Facebook,则最终会IS_IPHONE并IS_IPAD两者都是正确的。这可能会产生一些奇怪的行为!

在JavaScript中识别iPhone / iPad的正确方法:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = (navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);
if (IS_IPAD) {
  IS_IPHONE = false;
}

我们宣布IS_IPHONE在iPad上是错误的,以掩盖奇怪的Facebook UIWebView iPad用户代理。这是用户代理嗅探不可靠的一个示例。自定义其用户代理的 iOS 应用越多,用户代理嗅探的问题就越多。如果可以避免用户代理嗅探(提示:CSS 媒体查询),请执行该操作。