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

标签 javascript jquery

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

最佳答案

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

navigator.platform is not spoofed when the userAgent string is changed

该属性也是只读

navigator.platform is read-only


我可以想出下表

Mac Computers

Mac68K Macintosh 68K system.
MacPPC Macintosh PowerPC system.
MacIntel Macintosh Intel system.
MacIntel Apple Silicon (ARM)

iOS 设备

iPhone iPhone.
iPod iPod Touch.
iPad iPad.


现代 macs 返回 navigator.platform == "MacIntel" 但为了提供一些“ future 证明”,不要使用精确匹配,希望它们会更改为类似 MacARM 或将来的 MacQuantum

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);

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

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>


自从大多数 O.S.使用右侧的关闭按钮,当用户使用 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/

关于javascript - 使用 JavaScript 或 jQuery 检测 Mac OS X 或 Windows 计算机的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527983/

相关文章:

javascript - 未捕获错误 : INDEX_SIZE_ERR: DOM Exception 1, getImageData

javascript - 等到scrollTo完成后再运行命令

javascript - 使用 jquery 查找类似名称的变量

javascript - 模态形式消失而不点击形式

javascript - AJAX 将带有数据和多个图像的表单发送到 asp.net mvc 操作

javascript - 美元符号 jquery 作为字符串 : unterminated string literal

javascript - Spring Boot 与 microsoft sql server 的多数据库配置

javascript - 使用 ajax 的自动刷新在 10-15 秒后挂起/崩溃浏览器

javascript - JQuery-删除并添加回选择中的某些选项

jquery - 使用 jQuery-One-Page-Nav 的 Bootstrap 固定 header