Pytanie Najlepszy sposób na wykrycie komputerów Mac OS X lub Windows za pomocą JavaScript lub jQuery


Dlatego próbuję przesunąć przycisk "zamykania" na lewą stronę, gdy użytkownik znajduje się na komputerze Mac i prawej stronie, gdy użytkownik jest na komputerze. Teraz robię to badając klienta użytkownika, ale może on być zbyt łatwo sfałszowany do niezawodnego wykrywania systemu operacyjnego. Czy istnieje pewny sposób sprawdzenia, czy system operacyjny, na którym działa przeglądarka, to Mac OS X lub Windows? Jeśli nie, to co jest lepsze od wąchania agenta użytkownika?


76
2018-05-10 05:26


pochodzenie


Jeśli użytkownik manipuluje użytkownikiem, czy to nie jest jego problem? Martwię się o to, kiedy boli ty aby mieć nieważny useragent (np. gdy daje im dostęp do czegoś, czego nie chcesz, aby je miał), ale po coś takiego, dlaczego się stresujesz? Niech strzelą sobie w stopę i muszą poradzić sobie z konsekwencjami - bez potu z pleców, kolego. - Mahmoud Al-Qudsi
cóż, bardziej jak wskazówka niż odpowiedź. Możesz wykryć IE za pomocą warunkowych komentarzy. to jest +1 do arsenału wykrywania okien. ale to by się nie udawało, gdyby IE działało w emulatorze w innym systemie operacyjnym (takim jak Wine na Linuksie). A tak przy okazji, a co z linuxem? - Joseph
@ MahmoudAl-Qudsi Nawet bez podszywania się, mobilna Firefox często udaje, że jest Safari, Opera często udaje, że jest to firefox w niektórych wersjach. Bez podszywania się pod klienta agent jest nadal BARDZO zawodny. - alt
Możliwy duplikat: stackoverflow.com/q/7044944/55209 - Artem Koshelev
Ale odpowiedź na to pytanie jest po prostu "agentami użytkownika". - alt


Odpowiedzi:


The window.navigator.platform właściwość nie jest fałszowana, gdy zmieniony zostanie ciąg userAgent. Przetestowałem na moim Macu, jeśli zmienię userAgent na iPhone lub Chrome Windows, navigator.platform pozostaje MacIntel.

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

Nieruchomość jest również tylko czytać

navigator.platform is read-only


Mogłem wymyślić następujący stół

Komputery Mac

Mac68K  System Macintosh 68K.
MacPPC  System Macintosh PowerPC.
MacIntel  System Macintosh Intel. 

Urządzenia z systemem iOS

iPhone  iPhone.
iPod  iPod Touch.
iPad  iPad. 


Nowoczesne powroty Macs navigator.platform == "MacIntel" ale żeby dać jakiś "przyszły dowód", nie używaj dokładnego dopasowania, mam nadzieję, że zmienią się na coś podobnego MacARM lub MacQuantum w przyszłości.

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

Aby uwzględnić system iOS, który również używa "lewej strony"

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>


Ponieważ większość O.S. użyj przycisku zamykania po prawej stronie, możesz po prostu przesunąć przycisk zamykania w lewo, gdy użytkownik jest w MacLike O.S., w przeciwnym razie nie będzie problemu, jeśli umieścisz go na najbardziej rozpowszechnionej stronie, prawej.

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/


147
2017-08-01 03:12



navigator.platform jest przestarzałe i nie powinno być używane: developer.mozilla.org/en-US/docs/Web/API/NavigatorID/platform - advncd
@advncd gdzie mówi, że ta właściwość jest przestarzała? Nie mogłem znaleźć tej informacji nigdzie, ale w komentarzach w SOf. - EdMelo
@EdMelo wygląda na to, że niektóre z nich niedawno usunęły znak "przestarzałe": developer.mozilla.org/en-US/docs/Web/API/NavigatorID/... nie wiem, co jest poprawne. - advncd
@ Vitim.us dziękuję za szczegółową odpowiedź, naprawdę uratowałeś mój dzień :) - vivekkupadhyay
To nie jest przestarzałe. developer.mozilla.org/en-US/docs/Web/API/NavigatorID/... - Vitim.us


To takie proste:

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

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

Możesz robić śmieszne rzeczy, takie jak:

var isMac = isMacintosh();
var isPC = !isMacintosh();

30
2018-01-09 14:33



To obejmuje dwa system operacyjny. Oto bardziej wyczerpująca (ale prawdopodobnie wciąż niekompletna) lista obejmująca systemy Linux, BSD, Android, Palm, Sony Playstation itp .: stackoverflow.com/questions/19877924/... - Michael Scheper
Jeśli chcesz objąć więcej systemów operacyjnych, powinieneś udać się do biblioteki takiej jak Platform.js: github.com/bestiejs/platform.js - Benny Neugebauer


Czy tego właśnie szukasz? W przeciwnym razie daj mi znać, a ja usunę ten wpis.

Wypróbuj tę wtyczkę jQuery: http://archive.plugins.jquery.com/project/client-detect

Próbny:  http://www.stoimen.com/jquery.client.plugin/

Jest to oparte na quirksmode BrowserDetect wrap dla wtyczki jQuery browser / os detection.

Dla zapalonych czytelników:
http://www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin/
http://www.quirksmode.org/js/support.html

I więcej kodu wokół wtyczki znajduje się tutaj: http://www.stoimen.com/jquery.client.plugin/jquery.client.js


5
2018-05-10 05:36



KOLEŚ! Sfałszowałem swojego agenta użytkownika i nadal wykryłem mnie w Safari na Macu! Dzięki BRUV. - alt
@JacksonGariety Bez zmartwień bruv :)) czytaj dalej szczegóły tutaj ma cały kod rezydujący :) stoimen.com/jquery.client.plugin/jquery.client.js Życzymy miłego brosnika! - Tats_innit
@Tats_innit - Czy wiesz, jak to działa? Naprawdę ciekawy! - Derek 朕會功夫
Naprawdę nie jest to odpowiedź, której szukam. Czy to możliwe? - alt
@ JacksonGariety próbowałeś mojej odpowiedzi? - Vitim.us


Cóż, Windows i Mac nie są jedynymi platformami tam. ja to napisałem detect-os składnik, który używa tych samych technik i sprawdza więcej przypadków, ale także dla innych platform, takich jak Linux, Android, iOS ...

Możesz go zaimportować i użyć, jak pokazano w poniższych przykładach:

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

0
2018-06-06 14:01