当前位置: 首页 > 面试题库 >

检测设备是否为iOS

席兴平
2023-03-14
问题内容

我想知道是否有可能检测浏览器是否在iOS上运行,这与使用Modernizr进行功能检测的方式类似(尽管这显然是设备检测而非功能检测)。

通常,我宁愿使用功能检测,但我需要根据该问题确定设备是否为iOS,因为它们处理视频的方式YouTube API无法在iPad / iPhone/非Flash设备上使用


问题答案:

我不喜欢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将是truefalse

为什么不使用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) {
    html" target="_blank">while (iDevices.length) {
      if (navigator.platform === iDevices.pop()){ return true; }
    }
  }

  return false;
}

iOS()将是truefalse

注意:无论navigator.userAgent并且navigator.platform可以由用户或浏览器扩展伪造。

检测iOS版本

检测iOS版本的最常见方法是通过User Agent字符串进行解析。但是也有特征检测推论* ;

我们知道,一个事实,history API在引进的iOS4 - matchMedia API在iOS5中 - webAudio API在iOS6的 - WebSpeech API在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';
}


 类似资料:
  • 本文向大家介绍检测iOS设备是否越狱的方法,包括了检测iOS设备是否越狱的方法的使用技巧和注意事项,需要的朋友参考一下 在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。 首先,你可以尝试使用NSFileManager判断设备是否安装了如下越狱常用工具: 但是不要写成BOOL开关方法,给攻击者直接锁定目标hook绕过的机会 攻击者可能会改变这些工具

  • 问题内容: 在不使用触摸屏设备的情况下,使用媒体查询最安全的方法是什么?如果无法解决,您是否建议使用JavaScript解决方案,例如Modernizr或Modernizr? 问题答案: 我建议使用modernizr并使用其媒体查询功能。 但是,使用CSS时,存在伪类,例如Firefox。您可以使用:-moz-system-metric(touch- enabled)。但是,并非所有浏览器都提供这

  • 我对SO做了一些研究,但类似的问题 我网站的目的是,如果用户在手机(手机或平板电脑)和wifi上,播放视频剪辑;如果用户使用手机而不是wifi,则播放视频片段;如果用户不在手机上,则播放视频剪辑。 不同行为的原因是避免由于视频剪辑的尺寸相对较大而可能给用户带来附加费。这与速度无关 - 如今LTE与wifi的速度差异可能很小;它更多的是担心用户在没有wifi连接的情况下为数据使用付费。 所以我的问题

  • 问题内容: 我相信有更好,更合适的方法来做到这一点。但是现在我正在使用UIScreen.main.bounds来检测是否正在处理iPhone X(812高)。顺便说一句,这个特定的应用程序仅适用于风景。这就是我在此功能中要为幻灯片视图创建幻灯片的地方: 但是,如何检查模型? 问题答案: 如果您需要检测设备是否为iPhoneX,请不要使用,这取决于设备的方向。因此,如果用户以纵向模式打开您的应用程序

  • 问题内容: 我的应用使用,但是较旧的设备(特别是支持iOS 8的iPad 2和3)不支持模糊处理。 我想检查用户设备是否支持模糊。我该怎么做? 问题答案: 有一种看似有希望的内部方法,但是您的应用程序当然会被Apple拒绝。让我们创建自己的方法: 首先,我们需要知道我们正在使用的确切设备类型: 例如,这将返回iPad 2。这是iDevice型号的更新列表:https : //theiphonewi

  • 问题内容: 有没有办法检查Swift中“日期和时间”的设备设置是否设置为自动?如果有的话,可以使用户切换到所需的设置(自动) 问题答案: iOS的结构方式,您的应用程序位于沙盒中,并且只有在Apple已与开发人员社区共享了公共API的情况下,才能与系统通信。某些公共API可以像加速度计一样自由使用,而其他API则需要用户许可,例如位置信息。不幸的是,日期和时间设置api不是公开的,因此您根本无法使