본문 바로가기
Language & Library/JS & TS

[JavaScript] Safari에서 iPad 판단 하는 방법 (UserAgent, Navigator)

by 미네마네모 2020. 8. 21.

이 글로 버그 잡았으면 !!!! 댓글 하트 구독 박으세요 어서

 

보통 JavaScript에서 접속한 단말의 종류(ex. 데스크탑, 모바일)를

판단하는데 UserAgent라는 값을 참고함.

 

아니 근데 이런 양아치 애플님들이

작년부터 iPad의 데스크톱화를 말하면서

Safari에서 Mac Desktop 모델들과 같은

UserAgent 값을 보내주기 시작했다.

 

 

위와 같이 Google Chrome 착한 친구들은

브라우저에서 알아서 iPad인지 판단해서

User Agent 값을 넣어주더라...

iPad Pro's UserAgent by Chrome

 

iPad: CPU OS 13_6 like Mac OS X

MacBook Pro's UserAgent by Chrome

Macintosh, Intel Mac OS X 10_15_1

 

 

하지만 Apple Safari 나쁜 친구들는

양아X처럼...

Desktop이던 테블릿이던 똑같이 보내준다..

iPad Pro's UserAgent by Safari

iPad: CPU OS 13_6 like Mac OS X

MacBook Pro's UserAgent by Safari

 

Macintosh, Intel Mac OS X 10_15_1

 

그래서 한때 커뮤니티에서도 난리 났었음

https://developer.apple.com/forums/thread/119186?page=2

 

어쨋든 나는 이부분을 판단하기위해

Device의 터치 기능 여부를 확인하기로 했다.

Safari Browser userAgent에 Mac OS 포함 userAgent에 Mac OS 미포함
maxTouchPoints 값이 0 Desktop Device Apple 제품 아님
maxTouchPoints 값이 5 iPad Apple 제품 아님

 

Navigator.maxTouchPoints

https://developer.mozilla.org/en-US/docs/Web/API/Navigator/maxTouchPoints

 

위 링크를 참고하면 알 수 있겠지만

maxTouchPoints는 기기의 최대 동시 터치수를 말한다.

Desktop(맥북포함)은 0 iPad는 5를 리턴한다.

(단, Desktop 제품이 Touch 기능이 안나온다는 가정...)

 

추가적으로 코드를 첨부할 필요가 있나 싶지만 코드를 첨부한다.

<!DOCTYPE html>
<html lang="en">
<body>
  <div id="root">
    <div>
      <span>User Agent : </span><span class="userAgent"></span>
    </div>
    <hr>
    <div>
      <span>최대 터치 수 : </span><span class="maxTouchPoints"></span>
    </div>
    <hr>
  </div>
  <script>
    document.querySelector('.maxTouchPoints').innerText = `${navigator.maxTouchPoints}`;
    document.querySelector('.userAgent').innerText = `${navigator.userAgent}`;
  </script>
</body>
</html>

 

이 글로 버그 잡았으면 !!!! 댓글 하트 구독 박으세요 어서

댓글