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

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

 Mahmoud Al-Qudsi10 мая 2012 г., 07:29
Если пользователь манипулирует useragent, не его ли это проблема? Я бы беспокоился об этом, когда это больнот для того, чтобы у них был недействительный пользовательский агент (например, когда он дает им доступ к тому, чего вы не хотите, чтобы они имели), но для чего-то подобного, почему вы подчеркиваете? Пусть стреляют себе в ногу, и им приходится разбираться с последствиями - ни капли пота, приятель.
 Joseph10 мая 2012 г., 07:30
Хорошо, больше похоже на совет, чем на ответ. Вы можете обнаружить IE с помощью условных комментариев. это +1 к арсеналу обнаружения окон. но это не сработало бы, если бы IE запускался в эмуляторе в другой ОС (например, Wine в Linux). Кстати, а как насчет Linu
 alt10 мая 2012 г., 07:33
@ MahmoudAl-Qudsi Даже без спуфинга мобильный Firefox часто притворяется Safari, а Opera в некоторых версиях притворяется, что он Firefox. Без подмены пользовательский агент все еще ОЧЕНЬ ненадежен.
 Artem Koshelev10 мая 2012 г., 07:34
Возможная копия: Stackoverflow.com / д / 7044944/55209
 alt10 мая 2012 г., 07:35
Но ответ на этот вопрос - просто «пользовательские агенты».

Ответы на вопрос(3)

Это так просто:

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

function isWindows() {
  return navigator.platform.indexOf('Win') > -1
}

Ты можешь делать смешные вещи, например:

var isMac = isMacintosh();
var isPC = !isMacintosh();
 Benny Neugebauer23 мар. 2016 г., 10:15
Если вы хотите охватить больше операционных систем, то вам следует обратиться к библиотеке, подобнойPlatform.js: Github.com / bestiejs / platform.js
 Michael Scheper22 мар. 2016 г., 23:36
Ну, это покрываетдв операционные системы. Вот более полный (но, возможно, еще неполный) список, который включает в себя Linux, BSD, Android, Palm, Sony Playstation и т. Д .: / Stackoverflow.com вопросы / 19877924 / ...
 Benny Neugebauer10 янв. 2019 г., 16:25
@ EternalDarkness, вот почему я назвал этоisPC (и нетisWindows илиisLinux) потому что Linux работает на ПК, но macOS работает только на Mac.
 Eternal Darkness06 янв. 2019 г., 18:08
@ BennyNeugebauerisPC не должно быть равно!isMacintosh();. Что делать, если пользователь работает на Linux или любой другой платформе? Он обнаружит, что они не на Mac, и подумает, что они на ПК.

что вы ищите? В противном случае, дайте мне знать, и я удалю этот пост.

Попробуйте этот плагин jQuery:http: //archive.plugins.jquery.com/project/client-detec

Demo: http: //www.stoimen.com/jquery.client.plugin

Это основано на quirksmode BrowserDetect обертка для jQuery браузера / плагин обнаружения OS.

Для увлеченных читателей:
http: //www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin
http: //www.quirksmode.org/js/support.htm

И еще код вокруг плагина находится здесь:http: //www.stoimen.com/jquery.client.plugin/jquery.client.j

 Vitim.us07 окт. 2013 г., 16:05
@ JacksonGariety ты пробовал мой ответ?
 Derek 朕會功夫10 мая 2012 г., 07:43
@ Tats_innit - Ты знаешь, как это работает? Действительно любопытно!
 Tats_innit10 мая 2012 г., 07:40
@ JacksonGariety Не беспокойся, брув :)) читайте подробности здесь, есть весь код, повторяющийся :) Stoimen.com / jquery.client.plugin / jquery.client.js Приятного тебе приятеля :) ура!
 alt10 мая 2012 г., 10:19
Не совсем тот ответ, который я ищу. Это вообще возможно?
 alt10 мая 2012 г., 07:37
DUDE! Я подделал свой пользовательский агент, и он все еще обнаружил меня в Safari для Mac! Спасибо BRUV.
Решение Вопроса

Window.navigator.platformвойство @ не подделывается при изменении строки userAgent. Я проверил на своем Mac, если я изменяю userAgent на iPhone или Chrome Windows, Navigator.platform остается MacIntel.

Собственность тоже Только чтение

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

Mac Computers

Mac68K Макинтош 68K система.
MacPPC Macintosh Система PowerPC.
MacIntel Макинтош Система Intel.

iOS Devices

iPhone IPhone.
iPod Ipod Touch
iPad IPad.

Модерн Макс возвращаетсяnavigator.platform == "MacIntel" но, чтобы дать какое-то «доказательство будущего», не используйте точное соответствие, надеюсь, они изменятся на что-то вродеMacARM илиMacQuantum в будущем

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

Включить iOS, которая также использует «левую сторону»

var isMacLike = navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i)?true:false;
var isIOS = navigator.platform.match(/(iPhone|iPod|iPad)/i)?true:false;

var is_OSX = navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) ? true : false;
var is_iOS = navigator.platform.match(/(iPhone|iPod|iPad)/i) ? true : false;

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 O.S. В противном случае это не проблема, если вы поместите его на самую обычную сторону справа.

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

function test() {

  var mac = navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) ? true : false;

  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

 Ryan Burbidge16 февр. 2018 г., 00:13
Свойство платформы доступно только для чтения, но его можно подделать: / Stackoverflow.com вопросы / 2166540 / ...
 Qix26 дек. 2018 г., 08:21
Просто заметка:x?true:false можно (и нужно) заменить наBoolean(x).
 Vitim.us29 сент. 2016 г., 14:55
 Íhor Mé30 апр. 2017 г., 19:22
MacQuantum сделал мой день.
 vivekkupadhyay28 сент. 2016 г., 11:38
@ Vitim.us большое спасибо за подробный ответ, ты действительно спас мой день

Ваш ответ на вопрос