检测设备是否为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将是truefalse

为什么不是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()将是truefalse

注意: navigator.userAgentnavigator.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 if device is iOS

下一篇: Detect max video resolution support for a mobile device on responsive website