Лучший способ обнаружения компьютеров Mac OS X или Windows с помощью JavaScript или jQuery

Итак, я пытаюсь переместить кнопку "закрыть" на левую сторону, когда пользователь находится на Mac и справа, когда пользователь находится на ПК. Теперь я делаю это, изучая пользовательский агент, но его можно легко подделать для надежного обнаружения ОС. Есть ли верный способ определить, работает ли ОС, на которой работает браузер, Mac OS X или Windows? Если нет, то чем лучше нюхать пользовательский агент?

Ответ 1

Свойство window.navigator.platform не подделывается при изменении строки userAgent. Я проверил на своем Mac, если я изменю userAgent на iPhone или Chrome Windows, навигатор. Платформа остается MacIntel.

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

Свойство также доступно только для чтения

navigator.platform is read-only


Я мог придумать следующую таблицу

Компьютеры 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
}