使用 JavaScript 检测 iOS 5 或更高版本

Posted

技术标签:

【中文标题】使用 JavaScript 检测 iOS 5 或更高版本【英文标题】:Detect iOS 5 or Higher with JavaScript 【发布时间】:2013-08-02 14:27:14 【问题描述】:

我正在尝试使用以下脚本来检测浏览器是否为 ios 5 或更高版本(来自此 SO 线程 Detect iOS version less than 5 with javascript)。

function iOSversion() 
    if (/iP(hone|od|ad)/.test(navigator.platform)) 
        var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
        return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
    


ver = iOSversion();

if (ver[0] >= 5) 
    alert('This is running iOS 5 or later.');
 else 
    alert('This is NOT running iOS 5 or later.');

它可以在 iOS 5 或更高版本中正常运行,但在任何其他浏览器中都会产生以下错误:

Uncaught TypeError: Cannot read property '0' of undefined 

然后这个脚本下面的所有 JavaScript 都失败了。

请有人建议我如何解决这个问题?谢谢。

【问题讨论】:

【参考方案1】:

你正在检查ver[0] >= 5,但如果不是iOS,ver是未定义的,所以你必须先检查它是否被定义:

function iOSversion() 
    if (/iP(hone|od|ad)/.test(navigator.platform)) 
        var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
        return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
    


var ver = iOSversion();

if (ver && ver[0] >= 5) 
    alert('This is running iOS 5 or later.');
 else 
    alert('This is NOT running iOS 5 or later.');

【讨论】:

typeof ver != 'undefined' 可能是一个更好的主意,而不是依赖if (ver) 完美,谢谢!我知道这是我所缺少的一些简单的东西。我正在使用它来应用位置:固定到可以处理它的移动浏览器。在这种情况下,UA 嗅探对于特征检测是必要的,因为大多数移动浏览器都支持固定位置,但很多都以非常错误的方式。再次感谢您的快速答复。【参考方案2】:

iOSversion() 为任何其他浏览器返回 undefined

尝试做:undefined[0] 会给你你得到的错误。

您可以将支票更改为:

if (ver !== undefined && ver[0] >= 5) 
    // ..

【讨论】:

以上是关于使用 JavaScript 检测 iOS 5 或更高版本的主要内容,如果未能解决你的问题,请参考以下文章

xcode 4.5 是不是支持 ios 4.3 模拟器或更早版本?

如何在 Asp.net 中使用 javascript 检测 IE 11

提交到 App Store 的应用和应用更新必须使用 Xcode 5.1.1 或更高版本以及 iOS 7 SDK 构建

如何解决提交到 App Store 的应用和应用更新必须使用 Xcode 5.1.1 或更高版本以及 iOS 7 SDK 构建

CBCentralManagerState(iOS 5.x 到 9.x)和 CBManagerState(iOS 10.x 或更高版本)之间的 CoreBluetooth 兼容性问题 [重复]

在 iOS 7 中检测静音模式