2013-08-02 44 views
1

我试图使用以下脚本来检测浏览器是否为iOS 5或更高版本(从此线程Detect iOS version less than 5 with JavaScript)。使用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.'); 
} 

它的工作原理的iOS 5或更高版本,因为它应该,但在任何其他浏览器,它产生以下错误:

Uncaught TypeError: Cannot read property '0' of undefined 

然后这个剧本下的所有的JavaScript失败。

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

回答

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.'); 
} 
+0

可能对'的typeof版本=“undefined'',而不是依赖于'如果(VER)' – luqmaan

+0

完美,谢谢你一个更好的主意!我知道这是我错过的简单事情。我正在使用它来应用位置:固定到可以处理它的移动浏览器。在这种情况下,UA嗅探对于特征检测是必要的,因为大多数移动浏览器支持固定位置,但是许多以非常多的方式进行。再次感谢您的快速回答。 – user2586455

0

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

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

你可以改变你的支票:

if (ver !== undefined && ver[0] >= 5) { 
    // .. 
} 
相关问题