我不喜欢User Agent嗅探,但是这是你的处理方式:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
另一种方法是依靠
navigator.platform:
var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS将是
true或
false
为什么不使用MSStream
微软在IE11中注入了iPhone一词,
userAgent以试图以某种方式欺骗Gmail。因此,我们需要排除它。关于这方面更多的信息在这里和这里。
以下是IE11的更新
userAgent(适用于Windows Phone 8.1的Internet Explorer更新):
Mozilla / 5.0(移动; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0;触摸; rv:11.0; IEMobile / 11.0; NOKIA; Lumia 930),例如iPhone OS 7_0_3 Mac OS X AppleWebKit / 537(KHTML,例如Gecko)移动Safari / 537
无需使用正则表达式即可轻松添加更多设备:
function iOS() { var iDevices = [ 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod' ]; if (!!navigator.platform) { while (iDevices.length) { if (navigator.platform === iDevices.pop()){ return true; } } } return false;}iOS()将是
true或
false
注意:无论
navigator.userAgent并且
navigator.platform可以由用户或浏览器扩展伪造。
检测iOS版本
检测iOS版本的最常见方法是通过User Agent字符串进行解析。但是也有特征检测推论* ;
我们知道,一个事实,
history API在引进的iOS4 -
matchMedia API在iOS5中 -
webAudio API在iOS6的 -
WebSpeechAPI在iOS7等..
注意:以下代码不可靠,如果在更新的iOS版本中不推荐使用这些HTML5功能,则这些代码将中断。你被警告了!
function iOSversion() { if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) { if (!!window.indexedDB) { return 'iOS 8 and up'; } if (!!window.SpeechSynthesisUtterance) { return 'iOS 7'; } if (!!window.webkitAudioContext) { return 'iOS 6'; } if (!!window.matchMedia) { return 'iOS 5'; } if (!!window.history && 'pushState' in window.history) { return 'iOS 4'; } return 'iOS 3 or earlier'; } return 'Not an iOS device';}


