jQuery를 사용하여 iPad 사용자를 감지 하시겠습니까?


답변:


317

아이 패드 감지

userAgent속성을 살펴보면 iPad 사용자를 감지 할 수 있어야합니다 .

var is_iPad = navigator.userAgent.match(/iPad/i) != null;

iPhone / iPod 감지

마찬가지로 platformiPhone 또는 iPod과 같은 장치를 확인 하는 속성 :

function is_iPhone_or_iPod(){
     return navigator.platform.match(/i(Phone|Pod))/i)
}

노트

작동하는 동안 일반적으로 신뢰할 수없고 스푸핑 될 수 있으므로 브라우저 별 검색을 수행하지 않아야합니다. Modernizr 과 같은 라이브러리를 통해 수행 할 수있는 대부분의 경우 실제 기능 감지 를 사용하는 것이 좋습니다 .

Brennen의 답변 에서 지적했듯이 Facebook 앱 내 에서이 감지를 수행하면 문제가 발생할 수 있습니다. 이 시나리오를 처리하기위한 그의 답변을 참조하십시오.

관련 자료


9
하하, jQuery 접근 방식과 Javascript 접근 방식을 차별화하고 있습니까?
Harmen

4
왜 여기에 2 개의 엄지 손가락이 있습니까?
로켓 Hazmat

3
네비게이터 사용자 에이전트를 사용하지 않도록 지원 기능을 기반으로이를 감지하는 방법이 있습니까?
albanx

6
하나의 오타 (iPod 대신 iPad 여야 함) "a"가 아닌 "a"입니다.
Satish

4
고마워요 Satish-나는 그 부분을 iPod 용으로 만들었습니다. 나는 그것을 원래 질문에 대한 접선으로 포함시켰다.
Rion Williams

22

허용 솔루션은 아이폰에 대한 올바른, 그것은 잘못 모두를 선언합니다 isiPhoneisiPad페이스 북의 응용 프로그램에서 자신의 아이 패드에 대한 귀하의 사이트를 방문하는 사용자를위한 사실로.

일반적으로 iOS 기기에는 Safari 용 사용자 에이전트와 UIWebView 용 사용자 에이전트가 있습니다. iOS 앱이 사용자 에이전트를 사용자 정의하고 사용자 정의 할 수 있으므로이 가정은 올바르지 않습니다. 주요 범죄자는 Facebook입니다.

iOS 디바이스의 다음 사용자 에이전트 문자열을 비교하십시오.

# iOS Safari
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3
iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3

# UIWebView
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/98176
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117

# Facebook UIWebView
iPad: Mozilla/5.0 (iPad; U; CPU iPhone OS 5_1_1 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1.1;FBBV/4110.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.1.1;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0]
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; ru_RU) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1;FBBV/4100.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; tablet;FBLC/en_US]

iPad에서 Facebook UIWebView의 사용자 에이전트 문자열에는 'iPhone'이 포함되어 있습니다.

JavaScript에서 iPhone / iPad를 식별하는 기존 방법 :

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);

iPhone 및 iPad를 감지하기 위해이 접근 방식을 사용하는 경우 사용자가 iPad의 Facebook에서 온 경우 IS_IPHONE 및 IS_IPAD가 모두 참이됩니다. 그것은 이상한 행동을 일으킬 수 있습니다!

JavaScript에서 iPhone / iPad를 식별하는 올바른 방법 :

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = (navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);
if (IS_IPAD) {
  IS_IPHONE = false;
}

기괴한 Facebook UIWebView iPad 사용자 에이전트를 다루기 위해 iPad에서 IS_IPHONE을 false로 선언합니다. 이것은 사용자 에이전트 스니핑이 신뢰할 수없는 방법의 한 예입니다. 사용자 에이전트를 사용자 정의하는 iOS 앱이 많을수록 사용자 에이전트 스니핑에 더 많은 문제가 발생합니다. 사용자 에이전트 스니핑을 피할 수있는 경우 (힌트 : CSS 미디어 쿼리) IT를 수행하십시오.


1
iPhone / iPod 일치 를와 같은 단일 정규식으로 결합 /iPh?o(ne|d)/i하거나 /(iPhone|iPod)/iiPhod가 릴리스되는 경우 : P.
Cobby

9

나는 이것을 사용한다 :

function fnIsAppleMobile() 
{
    if (navigator && navigator.userAgent && navigator.userAgent != null) 
    {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var arrMatches = strUserAgent.match(/(iphone|ipod|ipad)/);
        if (arrMatches != null) 
             return true;
    } // End if (navigator && navigator.userAgent) 

    return false;
} // End Function fnIsAppleMobile


var bIsAppleMobile = fnIsAppleMobile(); // TODO: Write complaint to CrApple asking them why they don't update SquirrelFish with bugfixes, then remove

감사합니다 그것은 내가 찾던 것이 었습니다.
techie_28

내용이 null 인 객체를 반환하는 항목을 찾을 수 없으면 두 번째 조건을 수정하고 정상적으로 작동하기 때문에 데스크톱에서 실패합니다. if (arrMatches! = null) {return true; }
Joe L.

8

나는 이것을 사용한다 :

//http://detectmobilebrowsers.com/ + tablets
(function(a) {
    if(/android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(ad|hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|playbook|silk/i.test(a)
    ||
    /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))
    {
        window.location="yourNewIndex.html"
    }
})(navigator.userAgent||navigator.vendor||window.opera);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.