1

我正在尝试使用以下脚本来检测浏览器是否为 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 都会失败。

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

4

2 回答 2

5

您正在检查 if 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.');
}
于 2013-08-02T14:29:31.787 回答
0

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

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

您可以将支票更改为:

if (ver !== undefined && ver[0] >= 5) {
    // ..
}
于 2013-08-02T14:29:46.643 回答