JavaScript veya jQuery ile Mac OS X veya Windows bilgisayarları algılamanın en iyi yolu


110

Bu yüzden, kullanıcı Mac'teyken "kapat" düğmesini sol tarafa ve kullanıcı PC'deyken sağ tarafa taşımaya çalışıyorum. Şimdi bunu kullanıcı aracısını inceleyerek yapıyorum, ancak güvenilir işletim sistemi tespiti için çok kolay bir şekilde yanıltılabilir. Tarayıcının çalıştığı işletim sisteminin Mac OS X mi yoksa Windows mu olduğunu tespit etmenin kesin bir yolu var mı? Değilse, kullanıcı aracısının koklamasından daha iyi ne olabilir?


20
Kullanıcı kullanıcı aracısını manipüle ederse, bu onun sorunu değil mi? Geçersiz bir kullanıcı temsilcisine sahip olmaları sizi incittiğinde (örneğin, sahip olmalarını istemediğiniz bir şeye erişmelerini sağladığında) endişeleniyorum , ama böyle bir şey için neden stresliyorsunuz? Bırakın kendilerini ayağından vursunlar ve sonuçlarla başa çıksınlar - sırtınızdan terleme, dostum.
Mahmoud Al-Qudsi

bir cevaptan çok bir ipucu gibi. IE'yi koşullu yorumlarla tespit edebilirsiniz. Bu Windows algılama cephaneliğine +1. ancak IE başka bir işletim sistemindeki bir emülatörde çalıştırılırsa bu başarısız olur (Linux'ta Wine gibi). Bu arada, Linux'a ne dersin?
Joseph

@ MahmoudAl-Qudsi Adres sahteciliği olmasa bile, mobil Firefox genellikle Safari gibi davranır, Opera bazı sürümlerde genellikle firefox gibi davranır. Kullanıcı aracısı sahtekarlık yapmadan hala ÇOK güvenilmezdir.
alt


Ancak bu sorunun cevabı sadece "kullanıcı aracıları" dır.
alt

Yanıtlar:


192

Window.navigator.platform userAgent dize değiştiğinde özelliği sahte değildir. UserAgent'ı iPhone veya Chrome Windows olarak değiştirirsem Mac'imde test ettim, navigator.platform , MacIntel olarak kalır.

navigator.platform, userAgent dizesi değiştirildiğinde sahte değildir

Özellik ayrıca salt okunurdur

navigator.platform salt okunurdur


Aşağıdaki tablo ile gelebilirim

Mac Bilgisayarlar

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

iOS Cihazları

iPhone iPhone.
iPod ipod touch.
iPad iPad.


Modern mac'ler geri dönüyor, navigator.platform == "MacIntel"ancak bazı "geleceğe yönelik kanıtlar" sağlamak için tam eşleme kullanmıyorlar, umarım benzer bir şeye MacARMveya MacQuantumgelecekte değişeceklerdir .

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

"Sol tarafı" da kullanan iOS'u dahil etmek için

var isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
var isIOS = /(iPhone|iPod|iPad)/i.test(navigator.platform);


Çoğu işletim sistemi sağdaki kapat düğmesini kullandığından, kullanıcı MacLike OS üzerindeyken kapat düğmesini sola hareket ettirebilirsiniz, aksi takdirde en yaygın taraf olan sağa koyarsanız sorun olmaz.

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

function test() {

  var mac = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);

  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/


3
@ Vitim.us detaylı cevap için çok teşekkürler, gerçekten günümü kurtardın :)
vivekkupadhyay


1
MacQuantum günümü kutladı. 😂
Íhor Mé

Platform özelliği salt okunurdur, ancak yine de taklit etmek mümkündür: stackoverflow.com/questions/2166540/…
Ryan Burbidge

1
@Qix Daha iyi bir gelişme değiştirmek şeklinde olur str.match(regexp) ? true : falseile regexp.test(string). RegExp.prototype.test()Yöntem, doğal olarak, bir boolean döndürür. Bu nedenle, tercih ettiğim kod const platformIsMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);.
Rory O'Kane

52

Bu kadar basit:

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

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

Daha sonra şöyle komik şeyler yapabilirsiniz:

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

1
Bu iki işletim sistemini kapsar . Linux, BSD, Android, Palm, Sony Playstation'lar vb.
İçeren

Daha fazla işletim sistemini kapsamak istiyorsanız, aşağıdaki gibi bir kitaplığa gitmelisiniz Platform.js: github.com/bestiejs/platform.js
Benny Neugebauer

@BennyNeugebauer isPCeşit olmamalıdır !isMacintosh();. Ya kullanıcı linux veya başka bir platformdaysa? Mac'te olmadıklarını algılar ve PC'de olduklarını düşünür.
Mistik

@ EternalDarknessBu yüzden onu çağırdım isPC( isWindowsya da değil isLinux) çünkü Linux PC'lerde çalışıyor ama macOS sadece Mac'lerde çalışıyor.
Benny Neugebauer

5

Aradığınız bu mu? Aksi takdirde bana bildirin, bu gönderiyi kaldırırım.

Bu jQuery eklentisini deneyin: http://archive.plugins.jquery.com/project/client-detect

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

Bu, jQuery tarayıcı / işletim sistemi algılama eklentisi için tuhaf mod BrowserDetect'e dayanmaktadır.

Meraklı okuyucular için:
http://www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin/
http://www.quirksmode.org/js/support.html

Ve eklenti etrafında daha fazla kod burada bulunur: http://www.stoimen.com/jquery.client.plugin/jquery.client.js


2
KANKA! Kullanıcı aracımı aldattım ve hala Mac için Safari'de beni tespit etti! Teşekkürler BRUV.
alt

1
@JacksonGariety Endişelenmeyin, bruv :)) burada daha fazla ayrıntı okuyun, tüm kodu yeniden canlandırın :) stoimen.com/jquery.client.plugin/jquery.client.js İyi bir tane var brosniac :) Şerefe!
Tats_innit

@Derek hiya bruv - quirkmode tarayıcı eklentisini kullanır ve tarayıcı / işletim sistemini algılar buraya bakın quirksmode.org/js/detect.html ve ayrıca stoimen.com/jquery.client.plugin/jquery.client.js & quirksmode.org'a bakın /js/support.html umarım bu mantıklıdır bruv :)
Tats_innit

Boşver, bu sadece kullanıcı aracılarını kullanıyor gibi görünüyor ... bu biraz berbat.
alt

1
Gerçekten aradığım cevap bu değil. Hatta mümkün mü?
alt

0

Bunun işe yarayıp yaramadığını bana bildirin. StackOverflow.com'un yardımıyla bir Apple cihazını (Mac bilgisayarlar, iPhone'lar vb.) Tespit etmenin yolu :
Navigator.platform için bugün itibariyle olası değerlerin listesi nedir?

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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.