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

use*_*455 1 javascript user-agent ios

我正在尝试使用以下脚本来检测浏览器是否为iOS 5或更高版本(来自此SO线程使用JavaScript检测iOS版本少于5).

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.');
}
Run Code Online (Sandbox Code Playgroud)

它适用于iOS 5或更高版本,但在任何其他浏览器中它会产生以下错误:

Uncaught TypeError: Cannot read property '0' of undefined 
Run Code Online (Sandbox Code Playgroud)

然后,此脚本下面的所有JavaScript都会失败.

有人可以建议我怎么解决这个问题?谢谢.

ade*_*neo 5

您正在检查是否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.');
}
Run Code Online (Sandbox Code Playgroud)