【问题标题】:Detect iOS 5 or Higher with JavaScript使用 JavaScript 检测 iOS 5 或更高版本
【发布时间】: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 都失败了。

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

【问题讨论】:

    标签: javascript ios user-agent


    【解决方案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) {
        // ..
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 2012-07-03
      相关资源
      最近更新 更多