使用JavaScript或jQuery检测Mac OS X或Windows计算机的最佳方法
因此,当用户在Mac上时,我尝试将“关闭”按钮移到左侧,当用户在PC上时,我尝试将“关闭”按钮移到右侧。现在,我通过检查用户代理来执行此操作,但它太容易被欺骗,无法进行可靠的操作系统检测。是否有可靠的方法来检测运行浏览器的操作系统是Mac OS X还是Windows?如果没有,还有什么比用户代理嗅探更好呢?这就是您要寻找的吗?否则,请告诉我,我将删除此帖子 试试这个jQuery插件: 演示: 这是基于quirksmode browser检测jQuery浏览器/os检测插件的一个包装 对于热心的读者:使用JavaScript或jQuery检测Mac OS X或Windows计算机的最佳方法,javascript,jquery,Javascript,Jquery,因此,当用户在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
这样的库:@BennyNeugebauerisPC
不应该等于!Ismacintos()代码>。如果用户在linux或任何其他不同的平台上,该怎么办?它会检测到它们不在mac上,并认为它们在PC上。@eternaldarknesss这就是为什么我称它为isPC
(而不是isWindows
或isLinux
),因为Linux在PC上运行,而macOS只在mac上运行。@DrorBarstartsWith
方法是在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
}