使用jQuery检测iPad用户?
有没有办法检测当前用户是否正在使用jQuery / JavaScript的iPad?
有没有办法检测当前用户是否正在使用jQuery / JavaScript的iPad?
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应用程序中执行此检测时可能会出现问题。请参阅他处理这种情况的答案。
相关资源
尽管接受的解决方案对于iPhone是正确的,但它会错误地声明两者,并且对于从Facebook应用程序在iPad上访问您网站的用户而言,它是正确的。isiPhone
isiPad
传统观点认为,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 媒体查询),请执行该操作。