如何在JavaScript中检测Mac OS X版本

5

我在互联网上到处搜索如何检测操作系统及其版本。我已经找到了如何在Windows中实现此操作(请参见下面的代码),现在我想让它在Mac上也能工作。

Windows检测代码(完美运行!):

// OS detection
var _os_ = (function(){
var userAgent = navigator.userAgent.toLowerCase();
return {
    isWin2K: /windows nt 5.0/.test(userAgent),
    isXP: /windows nt 5.1/.test(userAgent),
    isVista: /windows nt 6.0/.test(userAgent),
    isWin7: /windows nt 6.1/.test(userAgent),
};
}());

// get OS shorthand names

var OS;
if(_os_.isWin2K){
OS = "Windows 2000";
}

if(_os_.isXP){
OS = "Windows XP";
}

if(_os_.isVista){
OS = "Windows Vista";
}

if(_os_.isWin7){
OS = "Windows 7";
}

alert(OS);

我想知道是否有可能在Mac OS X上实现同样的事情。比如,

 ...
 return {
     isMac10.5: /mac osx 10.5/.test(userAgent),
     isMac10.6: /mac osx 10.6/.test(userAgent),
     isMac10.7: /mac osx 10.7/.test(userAgent),
     isMac10.8: /mac osx 10.8/.test(userAgent),
 };

 ....
 if(_os_.isMac10.5){
 OS = "Mac OS X Leopard";
 }

 etc., etc...

有任何想法吗?非常感谢您的帮助!


1
Windows检测代码(完美运行!)也许只适用于某些浏览器的默认配置。对于用户代理字符串,没有标准规定,用户代理可以报告任何他们想要的信息,这是不可靠的,当然不会是“完美”的。 - RobG
2个回答

4
return {
     isMac105: /Mac OS X 10_5/.test(userAgent),
     isMac106: /Mac OS X 10_6/.test(userAgent),
     isMac107: /Mac OS X 10_7/.test(userAgent),
     isMac108: /Mac OS X 10_8/.test(userAgent),
 };

针对Mac的用户代理,例如:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_1) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25

Macintosh; U; Intel Mac OS X 10_5_8; ru) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5


你可以在属性名中使用点吗? - Waleed Khan
3
这在Firefox上行不通。userAgent是:"Mozilla/5.0(Macintosh; Intel Mac OS X 10.6; rv:26.0)Gecko/20100101 Firefox/26.0"。 - Barmar

1

是因为在Firefox上,OSX版本没有列出为10_6,而是10.6。因此,您需要添加以下特定行:isMac106:/Mac OS X 10.6/.test(userAgent)

请注意10和6之间的点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接