使用JavaScript或jQuery检测Mac OS X或Windows计算机的最佳方法

所以我试图移动一个“closures”button的左侧,当用户在Mac和右侧,当用户在PC上。 现在我正在通过检查用户代理来做这件事,但是对于可靠的操作系统检测来说,这太容易被欺骗了。 是否有确定的方式来检测浏览器运行的操作系统是Mac OS X还是Windows? 如果没有,有什么比用户代理嗅探更好?

当userAgentstring发生更改时, window.navigator.platform属性不会被欺骗。 我在我的Mac上testing过,如果我将userAgent更改为iPhone或Chrome Windows, navigator.platform仍为MacIntel。

当userAgent字符串发生更改时,navigator.platform不会被欺骗

该属性也是只读的

navigator.platform是只读的


我可以拿出下面的表格

Mac电脑

Mac68K Macintosh 68K系统。
MacPPC Macintosh PowerPC系统。
MacIntel Macintosh英特尔系统。

iOS设备

iPhone iPhone。
iPod iPod Touch。
iPad iPad。


现代苹果机返回navigator.platform == "MacIntel"但给一些“未来certificate”不使用完全匹配,希望他们将来会改变到像MacARMMacQuantum东西。

 var isMac = navigator.platform.toUpperCase().indexOf('MAC')>=0; 

要包含也使用“左侧”的iOS

 var isMacLike = navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i)?true:false; var isIOS = navigator.platform.match(/(iPhone|iPod|iPad)/i)?true:false; 
 var is_OSX = navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) ? true : false; var is_iOS = navigator.platform.match(/(iPhone|iPod|iPad)/i) ? true : false; var is_Mac = navigator.platform.toUpperCase().indexOf('MAC') >= 0; var is_iPhone = navigator.platform == "iPhone"; var is_iPod = navigator.platform == "iPod"; var is_iPad = navigator.platform == "iPad"; /* Output */ var out = document.getElementById('out'); if (!is_OSX) out.innerHTML += "This NOT a Mac or an iOS Device!"; if (is_Mac) out.innerHTML += "This is a Mac Computer!\n"; if (is_iOS) out.innerHTML += "You're using an iOS Device!\n"; if (is_iPhone) out.innerHTML += "This is an iPhone!"; if (is_iPod) out.innerHTML += "This is an iPod Touch!"; if (is_iPad) out.innerHTML += "This is an iPad!"; out.innerHTML += "\nPlatform: " + navigator.platform; 
 <pre id="out"></pre> 

就这么简单:

 function isMacintosh() { return navigator.platform.indexOf('Mac') > -1 } function isWindows() { return navigator.platform.indexOf('Win') > -1 } 

你可以做一些有趣的事情,比如:

 var isMac = isMacintosh(); var isPC = !isMacintosh(); 

这是你想要的? 否则,让我知道,我会删除这个职位。

试试这个jQuery插件: http : //archive.plugins.jquery.com/project/client-detect

演示: http : //www.stoimen.com/jquery.client.plugin/

这是基于quirksmode BrowserDetect一个用于jQuery浏览器/ os检测插件的包装。

对于敏锐的读者:
http://www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin/
http://www.quirksmode.org/js/support.html

围绕插件的更多代码驻留在这里: http : //www.stoimen.com/jquery.client.plugin/jquery.client.js

那么,Windows和Mac并不是那里唯一的平台。 我写了这个检测-OS组件,使用相同的技术,检查更多的边缘情况,但也为其他平台,如Linux,Android,iOS …

随意导入它并使用如下例所示:

 detectOs.isAndroid() => true/false detectOs.isIos() => true/false detectOs.isWindows() => true/false detectOs.isBlackBerry() => true/false detectOs.isMac() => true/false detectOs.isLinux() => true/false detectOs.get() => iOS/Android/Windows/Linux/Mac/BlackBerry/Unknown