Frage Die beste Methode, um Mac OS X oder Windows Computer mit JavaScript oder jQuery zu erkennen


Also versuche ich einen "Schließen" -Knopf auf die linke Seite zu bewegen, wenn der Benutzer auf dem Mac ist und die rechte Seite, wenn der Benutzer auf dem PC ist. Jetzt mache ich es, indem ich den Benutzeragenten untersuche, aber es kann zu leicht für eine zuverlässige Betriebssystemerkennung gespooft werden. Gibt es eine sichere Möglichkeit festzustellen, ob das Betriebssystem, auf dem der Browser ausgeführt wird, Mac OS X oder Windows ist? Wenn nicht, was ist besser als User Agent Sniffing?


75
2018-05-10 05:26


Ursprung


Antworten:


Das window.navigator.platform Eigenschaft wird nicht gespooft, wenn die UserAgent-Zeichenfolge geändert wird. Ich habe auf meinem Mac getestet, wenn ich den userAgent auf iPhone oder Chrome Windows ändere, navigator.platform bleibt MacIntel.

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

Das Anwesen ist auch schreibgeschützt

navigator.platform is read-only


Ich könnte mir die folgende Tabelle einfallen lassen

Mac-Computer

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

iOS-Geräte

iPhone  iPhone.
iPod  IPod Touch.
iPad  iPad. 


Moderne Macs kehrt zurück navigator.platform == "MacIntel" Aber um etwas "Zukunftssicheres" zu geben, verwenden Sie kein exaktes Matching, hoffentlich werden sie sich in etwas wie etwas ändern MacARM oder MacQuantum in der Zukunft.

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

Um iOS einzuschließen, das auch die "linke Seite" benutzt

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>


Da die meisten O.S. Benutzen Sie die Schließen-Schaltfläche auf der rechten Seite, Sie können die Schließen-Schaltfläche nur nach links bewegen, wenn sich der Benutzer auf einem MacLike OS befindet, sonst ist es kein Problem, wenn Sie es auf die häufigste Seite setzen, die rechte Seite.

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/


146
2017-08-01 03:12



So einfach ist das:

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

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

Sie können dann lustige Dinge tun wie:

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

30
2018-01-09 14:33



Suchst du danach? Ansonsten lass es mich wissen und ich werde diesen Beitrag entfernen.

Versuchen Sie dieses jQuery-Plugin: http://archive.plugins.jquery.com/project/client-detect

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

Dies basiert auf quirksmode BrowserDetect ein Wrapping für jQuery Browser / os Erkennung Plugin.

Für begeisterte Leser:
http://www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin/
http://www.quirksmode.org/js/support.html

Und mehr Code rund um das Plugin befindet sich hier: http://www.stoimen.com/jquery.client.plugin/jquery.client.js


5
2018-05-10 05:36



Nun, Windows und Mac sind nicht die einzigen Plattformen da draußen. Ich habe das geschrieben erkennen-os Komponente, die die gleichen Techniken verwendet und nach mehr Edge Cases sucht, aber auch für andere Plattformen wie Linux, Android, iOS ...

Fühlen Sie sich frei, es zu importieren und zu verwenden, wie in diesen Beispielen gezeigt:

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