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

使用JavaScript或jQuery检测Mac OS X或Windows计算机的最佳方法,javascript,jquery,Javascript,Jquery,因此,当用户在Mac上时,我尝试将“关闭”按钮移到左侧,当用户在PC上时,我尝试将“关闭”按钮移到右侧。现在,我通过检查用户代理来执行此操作,但它太容易被欺骗,无法进行可靠的操作系统检测。是否有可靠的方法来检测运行浏览器的操作系统是Mac OS X还是Windows?如果没有,还有什么比用户代理嗅探更好呢?这就是您要寻找的吗?否则,请告诉我,我将删除此帖子 试试这个jQuery插件: 演示: 这是基于quirksmode browser检测jQuery浏览器/os检测插件的一个包装 对于热心的读

因此,当用户在Mac上时,我尝试将“关闭”按钮移到左侧,当用户在PC上时,我尝试将“关闭”按钮移到右侧。现在,我通过检查用户代理来执行此操作,但它太容易被欺骗,无法进行可靠的操作系统检测。是否有可靠的方法来检测运行浏览器的操作系统是Mac OS X还是Windows?如果没有,还有什么比用户代理嗅探更好呢?

这就是您要寻找的吗?否则,请告诉我,我将删除此帖子

试试这个jQuery插件:

演示:

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

对于热心的读者:

关于插件的更多代码位于此处:

当用户代理字符串更改时,属性不会被欺骗。 我在Mac电脑上测试过,如果我将userAgent改为iPhone或Chrome Windows,navigator.platform仍然是MacIntel

该属性也是只读的


我可以想出下表

但仍被视为苹果机
Mac68K
Macintosh 68K系统。
MacPPC
Macintosh PowerPC系统。
MacIntel
Macintosh英特尔系统

iOS设备
iPhone
iPhone.
iPod
iPod Touch.
iPad
iPad


现代Mac返回
navigator.platform==“MacIntel”
,但为了提供一些“未来证明”,不要使用精确匹配,希望它们将来会变成类似
MacARM
MacQuantum
的东西

var isMac = navigator.platform.toUpperCase().indexOf('MAC')>=0;
包括也使用“左侧”的iOS

var是OSX=/(Mac | iPhone | iPod | iPad)/i.test(navigator.platform);
var是iOS=/(iPhone | iPod | iPad)/i.test(navigator.platform);
var是_Mac=navigator.platform.toUpperCase().indexOf('Mac')>=0;
var是_iPhone=navigator.platform==“iPhone”;
变量为_iPod=navigator.platform==“iPod”;
var是_iPad=navigator.platform==“iPad”;
/*输出*/
var out=document.getElementById('out');
if(!is_OSX)out.innerHTML+=“这不是Mac或iOS设备!”;
if(is_Mac)out.innerHTML+=“这是一台Mac电脑!\n”;
if(is_iOS)out.innerHTML+=“您正在使用iOS设备!\n”;
if(is_iPhone)out.innerHTML+=“这是一部iPhone!”;
if(is_iPod)out.innerHTML+=“这是一个iPod Touch!”;
if(is_iPad)out.innerHTML+=“这是一台iPad!”;
out.innerHTML+=“\n平台:”+navigator.platform

就这么简单:

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

function isWindows() {
  return navigator.platform.indexOf('Win') > -1
}
你可以做一些有趣的事情,比如:

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

让我知道这是否有效。在StackOverflow.com的帮助下检测苹果设备(Mac电脑、iPhone等)的方法:


如果用户操纵useragent,这不是他或她的问题吗?当他们拥有一个无效的用户代理(例如,当它允许他们访问你不希望他们拥有的东西)对你造成伤害时,我会担心,但是对于这样的事情,你为什么要紧张呢?让他们开枪打自己的脚,然后处理后果——不要让你汗流浃背,伙计。好吧,与其说是答案,不如说是一个提示。您可以使用条件注释检测IE。这是windows检测库的+1。但是,如果IE在另一个操作系统(如Linux上的Wine)的模拟器中运行,这将失败。顺便问一下,linux怎么样?@MahmoudAl Qudsi即使没有欺骗,移动Firefox也经常假装它是Safari,Opera在某些版本中经常假装它是Firefox。没有欺骗,用户代理仍然是非常不可靠的。可能重复:但这个问题的答案只是“用户代理”。哥们!我欺骗了我的用户代理,它仍然在Safari for Mac上检测到我!谢谢BRUV。@JacksonGariety不用担心BRUV:)阅读更多详细信息,这里有完整的代码更新:)祝您玩得愉快brosniac:)干杯@Derek hiya bruv-它使用quirkmode浏览器插件并检测浏览器/操作系统请参见此处,并进一步查看&希望这有意义bruv:)不管怎样,这似乎只是在使用用户代理。。。那有点糟糕,不是我想要的答案。有可能吗?嗯,这包括两个操作系统。这里有一个更全面(但可能还不完整)的列表,其中包括Linux、BSD、Android、Palm、Sony Playstations等:如果你想涵盖更多的操作系统,那么你应该选择像
Platform.js
这样的库:@BennyNeugebauer
isPC
不应该等于
!Ismacintos()。如果用户在linux或任何其他不同的平台上,该怎么办?它会检测到它们不在mac上,并认为它们在PC上。@eternaldarknesss这就是为什么我称它为
isPC
(而不是
isWindows
isLinux
),因为Linux在PC上运行,而macOS只在mac上运行。@DrorBar
startsWith
方法是在ECMAScript 2015(第6版)中引入的。如果您想让检查在不支持ES6的浏览器中工作,您必须使用
indexOf
(它具有更广泛的兼容性)。@Vitim.us非常感谢您提供的详细答案,您真的救了我一命:)它没有被弃用。MacQuantum让我开心@Qix更好的改进是替换
str.match(regexp)?true:false
regexp.test(字符串)
。该方法本机返回一个布尔值。因此,我的首选代码是
constplatformismaclike=/(Mac | iPhone | iPod | iPad)/i.test(navigator.platform)。自2019年以来,iPad(即iPadO)认为它们是一款
MacIntel
:rolleyes:
var isMac = isMacintosh();
var isPC = !isMacintosh();
var deviceDetect = navigator.platform;
var appleDevicesArr = ['MacIntel', 'MacPPC', 'Mac68K', 'Macintosh', 'iPhone', 
'iPod', 'iPad', 'iPhone Simulator', 'iPod Simulator', 'iPad Simulator', 'Pike 
v7.6 release 92', 'Pike v7.8 release 517'];

// If on Apple device
if(appleDevicesArr.includes(deviceDetect)) {
    // Execute code
}
// If NOT on Apple device
else {
    // Execute code
}