我想知道是否可以检测浏览器是否在iOS上运行,类似于使用Modernizr进行特征检测的方式(尽管这显然是设备检测而不是功能检测) .
通常我更喜欢功能检测,但我需要找出设备是否是iOS,因为他们根据这个问题处理视频的方式YouTube API not working with iPad / iPhone / non-Flash device
我想知道是否可以检测浏览器是否在iOS上运行,类似于使用Modernizr进行特征检测的方式(尽管这显然是设备检测而不是功能检测) .
通常我更喜欢功能检测,但我需要找出设备是否是iOS,因为他们根据这个问题处理视频的方式YouTube API not working with iPad / iPhone / non-Flash device
11 回答
有这个自定义Modernizr测试:https://gist.github.com/855078
这会将变量
_iOSDevice
设置为 true 或 falseiOS设备上的用户代理称其中包含iPhone或iPad . 我只是根据这些关键字进行过滤 .
简化,易于扩展的版本 .
几年前我写过这篇文章,但我相信它仍然有效:
检测iOS
我不是用户代理嗅探的粉丝,但是你会这样做:
另一种方法是依靠
navigator.platform
:iOS
将是true
或false
为什么不是MSStream
微软在IE11的_1075810中注入了单词 iPhone ,试图以某种方式欺骗Gmail . 因此我们需要排除它 . 有关此here和here的更多信息 .
以下是IE11的更新
userAgent
(适用于Windows Phone 8.1更新的Internet Explorer):无需使用正则表达式即可轻松添加更多设备:
iOS()
将是true
或false
Note:
navigator.userAgent
和navigator.platform
都可以由用户或浏览器扩展程序伪造 .检测iOS版本
检测iOS版本的最常用方法是parsing it from the User Agent string . 但也有 feature detection inference *;
我们知道
history API
是在iOS4中引入的 - 在iOS5中是matchMedia API
- 在iOS6中是webAudio API
- 在iOS7中是WebSpeech API
等等 .Note: 以下代码不可靠,如果在较新的iOS版本中不推荐使用这些HTML5功能,则会破坏以下代码 . 你被警告了!
如果您使用Modernizr,则可以为其添加自定义测试 .
您决定使用哪种检测模式(userAgent,navigator.vendor或navigator.platform)并不重要,您可以随时将其包装起来以便以后使用 .
在添加Modernizr测试时,您应该尽可能为功能添加测试,而不是设备或操作系统 . 添加十个测试所有测试iPhone没有任何问题,如果这是它需要的 . 有些东西不能被检测到 .
例如,在iPhone(而不是iPad)上无法在网页上内嵌播放视频,它会全屏显示 . 所以我创建了一个测试'no-inpage-video'
然后你可以在css中使用它(如果测试失败,Modernizr会在
<html>
标签中添加一个类.no-inpagevideo
)这将隐藏iPhone上的视频(我在这种情况下实际做的是显示一个替代图像,带有onclick来播放视频 - 我只是不想要默认的视频播放器和播放按钮来显示) .
哇,这里有很多冗长的代码 . 请保持简单!
这个是恕我直言,快速,保存,并运作良好:
这很快,因为正则表达式首先检查平台字符串的 ^s tarting位置,如果没有"iP"则停止(比搜索长UA字符串要快得多)
它比UA检查更安全(假设navigator.platform不太可能伪造)
检测iPhone / iPad模拟器
为了检测iOS版本,必须使用以下Javascript代码对用户代理进行解构:
var isiOSSafari = (navigator.userAgent.match(/like Mac OS X/i)) ? true: false;