因此,当用户使用 Mac 时,我尝试将“关闭”按钮移动到左侧,而当用户使用 PC 时,我尝试将“关闭”按钮移动到右侧。现在我通过检查用户代理来做到这一点,但它很容易被欺骗而无法进行可靠的操作系统检测。是否有可靠的方法来检测运行浏览器的操作系统是 Mac OS X 还是 Windows?如果没有,有什么比用户代理嗅探更好的呢?
7 回答
更改 userAgent 字符串时不会欺骗window.navigator.platform属性。如果我将 userAgent 更改为 iPhone 或 Chrome Windows,我在我的 Mac 上进行了测试,navigator.platform仍然是 MacIntel。
该属性也是只读的
我可以想出下表
Mac 电脑
Mac68K
麦金塔 68K 系统。
MacPPC
Macintosh PowerPC 系统。
MacIntel
Macintosh 英特尔系统。iOS 设备
iPhone
苹果手机。
iPod
iPod 触摸。
iPad
平板电脑。
现代macs回归navigator.platform == "MacIntel"
,但为了提供一些“未来证明”,不要使用精确匹配,希望它们会变成类似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>
由于大多数操作系统都使用右侧的关闭按钮,因此当用户使用 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/
就这么简单:
function isMacintosh() {
return navigator.platform.indexOf('Mac') > -1
}
function isWindows() {
return navigator.platform.indexOf('Win') > -1
}
这是你想要的?否则,请告诉我,我将删除此帖子。
试试这个 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
让我知道这个是否奏效。在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
}
您可以对此进行测试:
function getOS() {
let userAgent = window.navigator.userAgent.toLowerCase(),
macosPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i,
windowsPlatforms = /(win32|win64|windows|wince)/i,
iosPlatforms = /(iphone|ipad|ipod)/i,
os = null;
if (macosPlatforms.test(userAgent)) {
os = "macos";
} else if (iosPlatforms.test(userAgent)) {
os = "ios";
} else if (windowsPlatforms.test(userAgent)) {
os = "windows";
} else if (/android/.test(userAgent)) {
os = "android";
} else if (!os && /linux/.test(userAgent)) {
os = "linux";
}
return os;
}
document.getElementById('your-os').textContent = getOS();
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1 id="your-os"></h1>
</body>
</html>
我认为无论硬件架构如何,所有基于 Chrome 或 Chromium 的浏览器都将返回MacIntel
macOS 平台。