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

IT技术 javascript jquery
2021-01-14 15:08:51

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

5个回答

window.navigator.platform时的userAgent字符串改变没有欺骗性质。如果我将 userAgent 更改为 iPhone 或 Chrome Windows,我在 Mac 上进行了测试,navigator.platform仍然是 MacIntel。

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

该属性也是只读的

navigator.platform 是只读的


我可以想出下表

Mac电脑

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

iOS 设备

iPhone iPhone。
iPod iPod 触摸。
iPad iPad。


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

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

包括也使用“左侧”的 iOS

var isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
var isIOS = /(iPhone|iPod|iPad)/i.test(navigator.platform);


由于大多数操作系统使用右侧的关闭按钮,因此当用户使用 MacLike 操作系统时,您只需将关闭按钮向左移动即可,否则如果将其放在最常见的一侧,即右侧,则没有问题。

setTimeout(test, 1000); //delay for demonstration

function test() {

  var mac = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);

  if (mac) {
    document.getElementById('close').classList.add("left");
  }
}
#window {
  position: absolute;
  margin: 1em;
  width: 300px;
  padding: 10px;
  border: 1px solid gray;
  background-color: #DDD;
  text-align: center;
  box-shadow: 0px 1px 3px #000;
}
#close {
  position: absolute;
  top: 0px;
  right: 0px;
  width: 22px;
  height: 22px;
  margin: -12px;
  box-shadow: 0px 1px 3px #000;
  background-color: #000;
  border: 2px solid #FFF;
  border-radius: 22px;
  color: #FFF;
  text-align: center;
  font: 14px"Comic Sans MS", Monaco;
}
#close.left{
  left: 0px;
}
<div id="window">
  <div id="close">x</div>
  <p>Hello!</p>
  <p>If the "close button" change to the left side</p>
  <p>you're on a Mac like system!</p>
</div>

http://www.nczonline.net/blog/2007/12/17/don-t-forget-navigator-platform/

MacQuantum 让我快乐了一天。😂
2021-03-18 15:08:51
@Vitim.us 非常感谢您的详细回答,你真的救了我的一天:)
2021-03-29 15:08:51
请注意,此属性现在已被视为已过时,并计划随时被任何浏览器删除,因此这不再是正确的答案,并且作为高票接受的答案可能应该更新以解释如何在世界中检测平台这里navigator.platform不再存在。
2021-03-29 15:08:51
@Qix 更好的改进是str.match(regexp) ? true : falseregexp.test(string). RegExp.prototype.test()方法本机返回一个布尔值。因此,我的首选代码是const platformIsMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);.
2021-03-31 15:08:51
自 2019 年以来,iPad(即 iPadOS)认为它们是MacIntel:rolleyes:
2021-04-10 15:08:51

就这么简单:

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

function isWindows() {
  return navigator.platform.indexOf('Win') > -1
}
@DrorBar 该startsWith方法是在 ECMAScript 2015(第 6 版)中引入的。如果您希望检查在不支持 ES6 的浏览器中工作,则必须使用indexOf(它具有更广泛的兼容性)。
2021-03-19 15:08:51
@BennyNeugebauerisPC不应该等于!isMacintosh();. 如果用户在 linux 或任何其他不同的平台上怎么办?它会检测到它们不在 Mac 上并认为它们在 PC 上。
2021-03-25 15:08:51
如果你想覆盖更多的操作系统,那么你应该去一个像这样的库Platform.jsgithub.com/bestiejs/platform.js
2021-03-26 15:08:51
请注意,这navigator.platform不再是 Web 标准的一部分,因此这可能需要进行编辑以解释虽然这在 2015 年有效,但它不再是正确的解决方案。
2021-04-09 15:08:51
嗯,这涵盖了两个操作系统。这是一个更全面(但可能仍然不完整)的列表,其中包括 Linux、BSD、Android、Palm、Sony Playstations 等:stackoverflow.com/questions/19877924/...
2021-04-13 15:08:51

这是你想要的?否则,请告诉我,我将删除此帖子。

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

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

这是基于 quirksmode BrowserDetect 一个 jQuery 浏览器/操作系统检测插件的包装。

对于敏锐的读者:
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

并不是我正在寻找的答案。甚至有可能吗?
2021-03-15 15:08:51
伙计!我欺骗了我的用户代理,它仍然在 Mac 的 Safari 上检测到我!谢谢 BRUV。
2021-03-26 15:08:51
@Derek hiya bruv - 它使用 quirkmode 浏览器插件并检测浏览器/操作系统,请参阅此处quirksmode.org/js/detect.html并进一步参阅stoimen.com/jquery.client.plugin/jquery.client.js & quirksmode.org /js/support.html希望这有意义 bruv :)
2021-03-31 15:08:51
没关系,这似乎只是在使用用户代理……这有点糟糕。
2021-04-10 15:08:51
@JacksonGariety 不用担心 bruv :)) 阅读更多详细信息,这里有完整的代码树脂 :) stoimen.com/jquery.client.plugin/jquery.client.js有一个不错的 brosniac :) 干杯!
2021-04-14 15:08:51

让我知道这个是否奏效。StackOverflow.com 的帮助下检测 Apple 设备(Mac 计算机、iPhone 等)的方法
截至今天,navigator.platform 的可能值列表是什么?

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
}

我认为MacIntel无论硬件架构如何,所有基于 Chrome 或 Chromium 的浏览器都会回归macOS 平台。

查看 Chromium 源代码以获取更多详细信息。