Câu hỏi Cách tốt nhất để phát hiện Mac OS X hoặc Windows với JavaScript hoặc jQuery


Vì vậy, tôi đang cố gắng di chuyển nút "đóng" sang bên trái khi người dùng ở trên máy Mac và bên phải khi người dùng đang sử dụng PC. Bây giờ tôi đang làm nó bằng cách kiểm tra các tác nhân người dùng, nhưng nó có thể quá dễ bị giả mạo để phát hiện hệ điều hành đáng tin cậy. Có một cách chắc chắn để phát hiện xem hệ điều hành mà trình duyệt đang chạy là Mac OS X hay Windows không? Nếu không, những gì tốt hơn so với người sử dụng đại lý sniffing?


76
2018-05-10 05:26


gốc


Nếu người dùng thao túng useragent, đó không phải là vấn đề của anh ta hay cô ấy? Tôi sẽ lo lắng về nó khi nó đau bạn để họ có useragent không hợp lệ (ví dụ: khi nó cho phép họ truy cập vào thứ gì đó bạn không muốn họ có), nhưng đối với một cái gì đó như thế này, tại sao bạn lại nhấn mạnh? Hãy để họ tự bắn vào chân và phải đối phó với những hậu quả - không có mồ hôi ra khỏi lưng của bạn, bạn đời. - Mahmoud Al-Qudsi
tốt, giống như một mẹo hơn là một câu trả lời. Bạn có thể phát hiện IE với các chú thích có điều kiện. đây là +1 đến kho vũ khí phát hiện cửa sổ. nhưng điều này sẽ thất bại nếu IE được chạy trong một trình giả lập trong một hệ điều hành khác (như Wine on Linux). Bằng cách này, làm thế nào về Linux? - Joseph
@ MahmoudAl-Qudsi Ngay cả khi không giả mạo, Firefox di động thường giả vờ là Safari, Opera thường giả vờ nó là firefox trong một số phiên bản. Nếu không giả mạo tác nhân người dùng vẫn còn VERY không đáng tin cậy. - alt
Có thể trùng lặp: stackoverflow.com/q/7044944/55209 - Artem Koshelev
Nhưng câu trả lời của câu hỏi đó chỉ là "tác nhân người dùng". - alt


Các câu trả lời:


Các window.navigator.platform thuộc tính không bị giả mạo khi chuỗi userAgent bị thay đổi. Tôi đã thử nghiệm trên máy Mac nếu tôi thay đổi userAgent thành iPhone hoặc Chrome Windows, navigator.platform vẫn là MacIntel.

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

Chỗ nghỉ này cũng chỉ đọc

navigator.platform is read-only


Tôi có thể đưa ra bảng sau

Máy tính Mac

Mac68K  Hệ thống Macintosh 68K.
MacPPC  Hệ thống PowerPC Macintosh.
MacIntel  Macintosh Hệ thống Intel. 

Thiết bị iOS

iPhone  iPhone.
iPod  iPod Touch.
iPad  iPad. 


Mac hiện đại trả về navigator.platform == "MacIntel" nhưng để cung cấp cho một số "bằng chứng trong tương lai" không sử dụng kết hợp chính xác, hy vọng chúng sẽ thay đổi thành MacARM hoặc là MacQuantum trong tương lai.

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

Để bao gồm iOS cũng sử dụng "bên trái"

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>


Vì hầu hết O.S. sử dụng nút đóng ở bên phải, bạn chỉ có thể di chuyển nút đóng sang bên trái khi người dùng ở trên MacLike O.S., nếu không, bạn sẽ không gặp phải vấn đề gì nếu bạn đặt nó ở bên cạnh phổ biến nhất, bên phải.

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 không được dùng nữa và không nên sử dụng: developer.mozilla.org/en-US/docs/Web/API/NavigatorID/platform - advncd
@advncd nơi nào nó nói rằng tài sản này không được chấp nhận? Tôi không thể tìm thấy thông tin này ở bất cứ đâu ngoài các nhận xét trong SOf. - EdMelo
@EdMelo có vẻ như một số người gần đây đã xóa nhãn hiệu 'không dùng nữa': developer.mozilla.org/en-US/docs/Web/API/NavigatorID/… không chắc chắn những gì là chính xác. - advncd
@ Vitim.us cảm ơn rất nhiều cho câu trả lời chi tiết, bạn thực sự đã cứu ngày của tôi :) - vivekkupadhyay
Nó không được chấp nhận. developer.mozilla.org/en-US/docs/Web/API/NavigatorID/… - Vitim.us


Nó đơn giản như vậy:

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

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

Bạn có thể làm những điều buồn cười sau đó như:

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

30
2018-01-09 14:33



Vâng, đó bao gồm hai các hệ điều hành. Dưới đây là danh sách toàn diện hơn (nhưng có thể vẫn chưa hoàn chỉnh), bao gồm Linux, BSD, Android, Palm, Sony Playstations, v.v. stackoverflow.com/questions/19877924/… - Michael Scheper
Nếu bạn muốn trang trải thêm hệ điều hành, thì bạn nên đi tìm một thư viện như Platform.js: github.com/bestiejs/platform.js - Benny Neugebauer


Đây có phải là những gì bạn đang tìm kiếm? Nếu không, hãy cho tôi biết và tôi sẽ xóa bài đăng này.

Hãy thử plugin jQuery này: http://archive.plugins.jquery.com/project/client-detect

Bản giới thiệu:  http://www.stoimen.com/jquery.client.plugin/

Điều này được dựa trên quirksmode BrowserDetect một bọc cho jQuery trình duyệt / phát hiện os plugin.

Đối với độc giả quan tâm:
http://www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin/
http://www.quirksmode.org/js/support.html

Và nhiều mã xung quanh plugin nằm ở đây: http://www.stoimen.com/jquery.client.plugin/jquery.client.js


5
2018-05-10 05:36



DUDE! Tôi giả mạo tác nhân người dùng của mình và nó vẫn phát hiện thấy tôi trên Safari dành cho Mac! Cảm ơn BRUV. - alt
@ JacksonGariety Không lo lắng bruv :)) đọc thêm chi tiết ở đây có toàn bộ mã resinding :) stoimen.com/jquery.client.plugin/jquery.client.js Chúc vui vẻ nhé :) chúc mừng! - Tats_innit
@Tats_innit - Bạn có biết nó hoạt động như thế nào không? Thực sự tò mò! - Derek 朕會功夫
Không thực sự là câu trả lời tôi đang tìm kiếm. Thậm chí có thể không? - alt
@ JacksonGariety bạn đã thử câu trả lời của tôi chưa? - Vitim.us


Vâng, Windows và Mac không phải là nền tảng duy nhất trên mạng. Tôi đã viết cái này phát hiện-os thành phần sử dụng các kỹ thuật và kiểm tra tương tự cho các trường hợp cạnh khác, nhưng cũng cho các nền tảng khác, chẳng hạn như Linux, Android, iOS ...

Vui lòng nhập và sử dụng như được hiển thị trong các ví dụ sau:

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