检测设备是否为iOS
我想知道是否可以检测浏览器是否在iOS上运行,类似于可以使用Modernizr进行功能检测的功能(尽管这显然是设备检测而不是功能检测)。
通常情况下,我会倾向使用功能检测,但是我需要找出设备是否是iOS,因为它们处理视频的方式与此问题相同YouTube API不支持iPad / iPhone /非Flash设备
检测iOS
我不是用户代理嗅探的粉丝,但这里是你如何做的:
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的userAgent
中注入了iPhone这个词,以试图欺骗Gmail。 因此我们需要排除它。 更多关于这里和这里的信息。
下面是IE11更新的userAgent
(用于Windows Phone 8.1更新的Internet Explorer):
像iPhone OS 7_0_3 Mac OS X AppleWebKit / 537(KHTML,与Gecko一样)的Mozilla / 5.0(Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0; Touch; rv:11.0; IEMobile / 11.0; NOKIA; Lumia 930)移动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版本的最常用方法是从用户代理字符串中解析它。 但也有特征检测推理 *;
我们知道history API
是在iOS4中引入的 - matchMedia API
- webAudio API
- WebSpeech API
等等。
注意:以下代码不可靠,如果任何这些HTML5功能在新版iOS版本中不推荐使用,将会中断。 你被警告了!
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';
}
如果您正在使用Modernizr,则可以为其添加自定义测试。
您决定使用哪种检测模式(userAgent,navigator.vendor或navigator.platform)并不重要,您可以随时将其包装起来,以便以后使用。
//Add Modernizr test
Modernizr.addTest('isios', function() {
return navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
});
//usage
if (Modernizr.isios) {
//this adds ios class to body
Modernizr.prefixed('ios');
} else {
//this adds notios class to body
Modernizr.prefixed('notios');
}
这是自定义的Modernizr测试:https://gist.github.com/855078
链接地址: http://www.djcxy.com/p/14729.html下一篇: Detect max video resolution support for a mobile device on responsive website