그래서 저는 "닫기"버튼을 사용자가 Mac에있을 때는 왼쪽으로, 사용자가 PC에있을 때는 오른쪽으로 이동하려고합니다. 이제 사용자 에이전트를 검사하여 수행하고 있지만 신뢰할 수있는 OS 감지를 위해 너무 쉽게 스푸핑 될 수 있습니다. 브라우저가 실행되는 OS가 Mac OS X인지 Windows인지를 감지하는 확실한 방법이 있습니까? 그렇지 않다면 사용자 에이전트 스니핑보다 나은 것은 무엇입니까?
그래서 저는 "닫기"버튼을 사용자가 Mac에있을 때는 왼쪽으로, 사용자가 PC에있을 때는 오른쪽으로 이동하려고합니다. 이제 사용자 에이전트를 검사하여 수행하고 있지만 신뢰할 수있는 OS 감지를 위해 너무 쉽게 스푸핑 될 수 있습니다. 브라우저가 실행되는 OS가 Mac OS X인지 Windows인지를 감지하는 확실한 방법이 있습니까? 그렇지 않다면 사용자 에이전트 스니핑보다 나은 것은 무엇입니까?
답변:
window.navigator.platform의 사용자 에이전트 문자열이 변경 될 때 속성이 스푸핑되지 않습니다. userAgent를 iPhone 또는 Chrome Windows로 변경하면 Mac에서 테스트 했는데 navigator.platform 은 MacIntel로 유지됩니다.

속성도 읽기 전용입니다.

나는 다음 표를 생각 해낼 수 있었다
Mac 컴퓨터
Mac68KMacintosh 68K 시스템.
MacPPCMacintosh PowerPC 시스템.
MacIntelMacintosh Intel 시스템.iOS 기기
iPhone아이폰.
iPod아이팟 터치.
iPadiPad.
현대의 맥이 돌아 navigator.platform == "MacIntel"왔지만 일부 "미래 증명"을 제공하기 위해 정확한 매칭을 사용하지 않습니다. 바라건대 그들은 비슷 MacARM하거나 MacQuantum미래에 변경 될 것 입니다.
var isMac = navigator.platform.toUpperCase().indexOf('MAC')>=0;
"왼쪽"도 사용하는 iOS를 포함하려면
var isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
var isIOS = /(iPhone|iPod|iPad)/i.test(navigator.platform);
대부분의 OS는 오른쪽에있는 닫기 버튼을 사용하기 때문에 사용자가 MacLike OS를 사용 중일 때 닫기 버튼을 왼쪽으로 이동하면됩니다. 그렇지 않으면 가장 일반적인 쪽인 오른쪽에두면 문제가되지 않습니다.
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/
str.match(regexp) ? true : false함께 regexp.test(string). 이 RegExp.prototype.test()메서드는 기본적으로 부울을 반환합니다. 따라서 내가 선호하는 코드는 const platformIsMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);.
다음과 같이 간단합니다.
function isMacintosh() {
return navigator.platform.indexOf('Mac') > -1
}
function isWindows() {
return navigator.platform.indexOf('Win') > -1
}
다음과 같은 재미있는 일을 할 수 있습니다.
var isMac = isMacintosh();
var isPC = !isMacintosh();
Platform.js: github.com/bestiejs/platform.js
isPC는 !isMacintosh();. 사용자가 Linux 또는 기타 다른 플랫폼에있는 경우 어떻게합니까? Mac에 있지 않다는 것을 감지하고 PC에 있다고 생각합니다.
isPC(그리고 isWindows나 isLinux) 리눅스가 PC에서 실행하지만, 맥 OS는 맥에서 실행하기 때문이다.
이것이 당신이 찾고있는 것입니까? 그렇지 않은 경우 알려 주시면이 게시물을 제거하겠습니다.
이 jQuery 플러그인을 사용해보십시오 : http://archive.plugins.jquery.com/project/client-detect
데모 : http://www.stoimen.com/jquery.client.plugin/
이것은 jQuery 브라우저 / OS 감지 플러그인에 대한 quirksmode BrowserDetect 랩핑을 기반으로합니다.
열렬한 독자 :
http://www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin/
http://www.quirksmode.org/js/support.html
플러그인과 관련된 더 많은 코드는 http://www.stoimen.com/jquery.client.plugin/jquery.client.js 에 있습니다.
이것이 작동하는지 알려주십시오. StackOverflow.com의 도움을 받아 Apple 장치 (Mac 컴퓨터, iPhone 등)를 감지하는 방법 :
오늘 현재 navigator.platform에 가능한 값 목록은 무엇입니까?
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
}