Итак, я пытаюсь переместить кнопку "закрыть" на левую сторону, когда пользователь находится на Mac и справа, когда пользователь находится на ПК. Теперь я делаю это, изучая пользовательский агент, но его можно легко подделать для надежного обнаружения ОС. Есть ли верный способ определить, работает ли ОС, на которой работает браузер, Mac OS X или Windows? Если нет, то чем лучше нюхать пользовательский агент?
Лучший способ обнаружения компьютеров Mac OS X или Windows с помощью JavaScript или jQuery
Ответ 1
Свойство window.navigator.platform не подделывается при изменении строки userAgent. Я проверил на своем Mac, если я изменю userAgent на iPhone или Chrome Windows, навигатор. Платформа остается MacIntel.
Свойство также доступно только для чтения
Я мог придумать следующую таблицу
Компьютеры Mac
Mac68K
Macintosh 68K.MacPPC
Macintosh PowerPC.MacIntel
Macintosh Intel.iOS-устройства
iPhone
айфон.iPod
iPod Touch.iPad
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>
Ответ 2
Это так просто:
function isMacintosh() {
return navigator.platform.indexOf('Mac') > -1
}
function isWindows() {
return navigator.platform.indexOf('Win') > -1
}
Вы можете делать смешные вещи, например:
var isMac = isMacintosh();
var isPC = !isMacintosh();
Ответ 3
Это то, что вы ищете? В противном случае, дайте мне знать, и я удалю этот пост.
Попробуйте этот плагин jQuery: http://archive.plugins.jquery.com/project/client-detect
Демо: http://www.stoimen.com/jquery.client.plugin/
Это основано на quirksmode BrowserDetect wrap для плагина jQuery для браузера /os.
Для читателей:
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
Ответ 4
Ну, Windows и Mac - не единственные платформы. Я написал этот компонент detect-os, который использует те же методы и проверяет наличие более красных случаев, а также для других платформ, таких как Linux, Android, iOS...
Не стесняйтесь импортировать его и использовать, как показано в следующих примерах:
detectOs.isAndroid() => true/false
detectOs.isIos() => true/false
detectOs.isWindows() => true/false
detectOs.isBlackBerry() => true/false
detectOs.isMac() => true/false
detectOs.isLinux() => true/false
detectOs.get() => iOS/Android/Windows/Linux/Mac/BlackBerry/Unknown
Ответ 5
Дайте мне знать, если это работает. Способ обнаружить устройство Apple (компьютеры Mac, iPhone и т.д.) С помощью StackOverflow.com:
Каков список возможных значений для 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
}