모바일 장치를 감지하는 가장 좋은 방법은 무엇입니까?


1651

사용자가 jQuery에서 모바일 장치를 사용하고 있는지 여부를 감지하는 확실한 방법이 있습니까? CSS @media 속성과 비슷한 것이 있습니까? 브라우저가 핸드 헬드 장치에있는 경우 다른 스크립트를 실행하고 싶습니다.

jQuery $.browser함수는 내가 찾고있는 것이 아닙니다.


7
휴대 기기 전용 모바일 URL을 제공하십시오. 대부분의 주요 사이트에서 모바일 장치를 처리하는 방식입니다. m.google.com을 참조하십시오 .
meagar

6
jQuery는 모든 작업을 수행 할 수 없으며 수행 할 수 없습니다. 브라우저 간 DOM 탐색 및 조작, 브라우저 간 간단한 애니메이션 및 아약스를 제공하며 플러그인을 기반으로하는 골격 프레임 워크를 만듭니다. jQuery 솔루션을 구체적 으로 요청하기 전에 jQuery의 제한 사항을 알고 있어야 합니다.
Yi Jiang

78
사용자 에이전트는 지속적으로 목표를 이동하고 있습니다.이 게시물을 읽는 모든 사용자는 사용자 에이전트 스니핑에 매우주의해야합니다
Rob

46
'모바일'장치 란 무엇입니까? 터치를 지원하는 기기인가요 (Chrome Pixels 및 마우스가있는 Windows 8 랩톱 포함)? 화면이 작은 기기입니까 (망막 iPad는 어떻습니까)? CPU가 느린 장치입니까? 또는 인터넷 연결이 느린 장치입니까? 이 질문에 대한 답변을 원하는 내용에 따라 다릅니다. 화면 해상도 또는 터치를 목표로하는 것은 쉽습니다. 일부 장치에 대해 더 작은 콘텐츠 또는 덜 집중적 인 JS를 제공하려면 은색 글 머리 기호가 없습니다. window.navigator.connection을 테스트하고 (불쾌하고, 나쁘고, 잘못 권고 된) userAgent 스니핑으로 돌아갑니다. 내 2 센트
David Gilbertson

3
@Cole "Cole9"Johnson 정확히 내 요점. '모바일'은 터치, 느린 CPU, 느린 네트워크 및 작은 화면의 포괄적 인 용어로 사용됩니다. 그러나 이것들 중 어느 것도 완벽한 가정이 아닙니다. 나는 이것들을 개별적으로 고려하면 모호한 개념의 '모바일'을 설계하는 것보다 더 나은 제품을 얻을 것이라고 믿습니다. 따라서 OP에 그 질문을 제기했습니다.
데이비드 길버트 슨

답변:


2027

편집자 주 : 사용자 에이전트 감지는 최신 웹 앱에 권장되는 기술이 아닙니다. 이 사실을 확인하려면이 답변 아래의 주석을 참조하십시오. 기능 감지 및 / 또는 미디어 쿼리를 사용하여 다른 답변 중 하나를 사용하는 것이 좋습니다.


jQuery를 사용하는 대신 간단한 JavaScript를 사용하여 감지 할 수 있습니다.

if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
 // some code..
}

또는 jQuery를 통해 더 쉽게 액세스 할 수 있도록 두 가지를 결합 할 수 있습니다 ...

$.browser.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));

이제 위의 모든 장치로 $.browser돌아갑니다."device"

참고 : jQuery v1.9.1에서$.browser 제거되었습니다 . 그러나 jQuery 마이그레이션 플러그인 코드를 사용하여 이것을 사용할 수 있습니다.


보다 철저한 버전 :

var isMobile = false; //initiate as false
// device detection
if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|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/i.test(navigator.userAgent) 
    || /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(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(navigator.userAgent.substr(0,4))) { 
    isMobile = true;
}

438
사용자 에이전트 스니핑은 매우 고귀한 탐지 기술이며, 사용자 에이전트 문자열은 지속적으로 움직이는 대상이므로 단독으로 신뢰할 수 없습니다. 이 게시물을 찬성하는 사람들은 더 많은 연구를 고려해야합니다.
Rob

65
사용자 에이전트에서 특정 장치에 대한 스니핑 문제 중 하나는 새 장치가 나올 때 탐지를 업데이트해야한다는 것입니다. 이것은 이상적인 솔루션이 아닙니다.
ICodeForCoffee

11
안드로이드의 돌고래 브라우저는 그 문자열을 보내지 않습니다!
feeela

87
사용자는 교활 충분히 또는 개발자 그들에 대해 관심 사용자 에이전트 문자열을 변경하는 바보 충분 ... 경우
mattdlockyer는

58
그렇다면 마우스를 사용하는 Android TV를 얼마나 모바일로 생각하십니까? 듀얼 모드 (키보드 또는 터치 스크린)로 실행할 수있는 Windows PC는 얼마나 모바일입니까? iPad가 발명되기 전에이 작업을 수행했다면 나중에 모든 사이트에 추가해야했습니다. 다음 OS 출시 : Ubuntu Mobile, FirefoxOS, Tizen ....This.Is.A.Bad.Idea.
FrancescoMM

534

나에게 작은 것은 아름답 기 때문에이 기술을 사용하고 있습니다.

CSS 파일에서 :

/* Smartphones ----------- */
@media only screen and (max-width: 760px) {
  #some-element { display: none; }
}

jQuery / JavaScript 파일에서 :

$( document ).ready(function() {      
    var is_mobile = false;

    if( $('#some-element').css('display')=='none') {
        is_mobile = true;       
    }

    // now i can use is_mobile to run javascript conditionally

    if (is_mobile == true) {
        //Conditional script here
    }
 });

내 목표는 내 사이트를 "모바일 친화적"으로 만드는 것이 었습니다. 그래서 CSS 미디어 쿼리를 사용하여 화면 크기에 따라 요소를 표시하거나 숨 깁니다.

예를 들어, 모바일 버전에서는 Facebook Like Box를 활성화하고 싶지 않습니다. 모든 프로파일 이미지와 내용을로드하기 때문입니다. 모바일 방문자에게는 좋지 않습니다. 따라서 컨테이너 요소를 숨기는 것 외에도 jQuery 코드 블록 (위) 에서이 작업을 수행합니다.

if(!is_mobile) {
    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/pt_PT/all.js#xfbml=1&appId=210731252294735";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
}

http://lisboaautentica.com 에서 실제로 볼 수 있습니다.

나는 여전히 모바일 버전으로 작업하고 있으므로이 글을 쓸 때 여전히 제대로 보이지 않습니다.

dekin88에 의해 업데이트

미디어 감지를 위해 내장 된 JavaScript API가 있습니다. 위의 솔루션을 사용하는 대신 다음을 사용하십시오.

$(function() {      
    let isMobile = window.matchMedia("only screen and (max-width: 760px)").matches;

    if (isMobile) {
        //Conditional script here
    }
 });

브라우저 지원 : http://caniuse.com/#feat=matchmedia

이 방법의 장점은 더 간단하고 짧을뿐 아니라 필요에 따라 더미 요소를 DOM에 추가하지 않고도 스마트 폰 및 태블릿과 같은 다른 장치를 개별적으로 대상으로 지정할 수 있다는 것입니다.


8
이것이 작동하기 위해 DOM에 # some-element가 실제로 필요하지 않습니까?
Rimer

68
-1이 screen.width속성 은 전역입니다. DOM에 요소를 임의로 추가하거나 불필요하게 CSS 미디어 쿼리를 가져올 필요는 없습니다. 또한 브라우저가 데스크탑에 있고 사용자가 창의 크기 $is_mobile를 조정하면 업데이트되지 않습니다.
merv

98
if( screen.width <= 480 ) { // is mobile }
andrewrjones

23
@andrewrjones Retina 장치는 width속성 값 IIRC를 두 배로 늘립니다 . 따라서, 망막 아이폰은있을 것이다 width640과 높이 960세로, 그리고 width960와의 높이 640풍경입니다.
Cole Johnson


236

Mozilla 에 따르면 -사용자 에이전트를 사용한 브라우저 감지 :

요약하면, 모바일 장치를 감지하려면 사용자 에이전트의 어느 곳에서나“Mobi”라는 문자열을 찾는 것이 좋습니다.

이처럼 :

if (/Mobi/.test(navigator.userAgent)) {
    // mobile!
}

모바일 모질라, 사파리, IE, 오페라, 크롬 등 모든 일반적인 모바일 브라우저 사용자 에이전트와 일치합니다.

안드로이드 업데이트

태블릿 용 Chrome 사용자 에이전트 문자열 에 "Mobi"가 포함되어 있지 않기 Android때문에 EricL 은 사용자 에이전트로도 테스트 할 것을 권장 합니다 (전화 버전에는 해당).

if (/Mobi|Android/i.test(navigator.userAgent)) {
    // mobile!
}

11
답변 해주셔서 감사합니다! 내가 선호 /Mobi/i.test(navigator.userAgent)로하지만 테스트 () 는 부울을 반환합니다.
arminrosu

5
역설적으로 Samsung Galaxy Note 8의 FireFox Mobile은 Mobi를 반환하지 않으며 테스트는 false를 반환합니다.
Eirinn

13
링크 된 기사에 언급 된 내용 : 장치가 "Mobi"로 표시되지 않을 정도로 충분히 큰 경우 데스크톱 사이트를 제공해야합니다 (가장 좋은 방법은 더 많은 데스크톱 컴퓨터가 터치 스크린으로 표시되므로 터치 입력을 지원해야 함).
QuasarDonkey

2
이것은 다른 제안 된 솔루션보다 훨씬 낫습니다. 승인 된 답변이어야합니다.
RNobel

9
Derp. 감사. 이전 게시물을 편집 할 수 없습니다. 여기 다시 있습니다 :/Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent)
EricL

90

간단하고 효과적인 원 라이너 :

function isMobile() { return ('ontouchstart' in document.documentElement); }

그러나 위의 코드는 터치 스크린이있는 랩톱의 경우를 고려하지 않습니다. 따라서 @Julian 솔루션을 기반으로 두 번째 버전을 제공합니다 .

function isMobile() {
  try{ document.createEvent("TouchEvent"); return true; }
  catch(e){ return false; }
}

29
터치 스크린이있는 Windows 랩톱은 어떻습니까?
Chris Cinelli

10
isMobile당신이 제공 한 두 번째 기능 true은 내 디 스톱 장치로 돌아갑니다 !! (Google Chrome v44.0)
누가 복음

12
이것은 실제로 모바일 감지가 아닌 isTouchSupported 메소드에 가깝습니다.
Barkermn01

3
모든 휴대 전화에 터치 스크린이있는 것은 아닙니다.
Andrew

@LukeP 모바일 에뮬레이션에서 데스크탑으로 갈 때 상쾌합니까?
Christian4423

81

모바일 장치를 감지하여 수행하는 작업이 "브라우저 스니핑"개념 IMO에 너무 가깝습니다. 일부 기능 감지를 수행하는 것이 훨씬 낫습니다. http://www.modernizr.com/ 과 같은 라이브러리 가 도움이 될 수 있습니다.

예를 들어, 모바일과 비 모바일 사이의 경계는 어디에 있습니까? 매일 점점 더 흐릿 해집니다.


3
그래도 사용자는 지원되는 기능에 관계없이 해당 장치에 "jquery mobile"을 사용할 수 있습니다.
Sirber

9
예를 들어, "모바일" "비 모바일"관련 문제는 롤오버 기능입니다. JS에서 기능을 해제하도록 설정했습니다. 감지 만하면됩니다.
Sam Sussman

4
여전히 장치 별 다운로드 가능한 앱을 제공하려는 경우 유용 할 수 있습니다.
Bastes

3
상황에 따라, 사용자가 모바일 장치에 있는지 알려주는 무언가를 찾고 있으므로 무거운 JavaScript 기반 애니메이션을 비활성화 할 수 있습니다. UA 스니핑은 사용자 브라우저의 JavaScript 성능 기능을 '감지'하는 것보다 훨씬 더 적합합니다.
Rick Suggs 2016 년

9
모바일 / 비 모바일은 매우 큰 차이점입니다. 모바일 / 데스크톱 환경을 위해 상호 작용 / ui를 제공하려고 할 때 '기능 감지'를 사용하는 것은 어리 석습니다. 개인적으로, 현재 브라우저가 실행되는 OS를 쉽고 안정적으로 얻을 수 있기를 바랍니다
nbsp

66

jQuery는 아니지만 http://detectmobilebrowser.com/을 찾았습니다.

여러 언어로 모바일 브라우저를 감지하는 스크립트를 제공하며 그 중 하나는 JavaScript입니다. 그것은 당신이 찾고있는 것을 도울 수 있습니다.

그러나 jQuery를 사용하므로 jQuery.support 콜렉션을 알고 자 할 수 있습니다. 현재 브라우저의 기능을 감지하기위한 속성 모음입니다. 설명서는 다음과 같습니다. http://api.jquery.com/jQuery.support/

나는 당신이 무엇을 성취하려고하는지 정확히 알지 못하기 때문에, 이것들 중 어느 것이 가장 유용한 지 모르겠습니다.

모든 말을 들어, 최선의 방법은 서버 측 언어를 사용하여 다른 스크립트를 출력으로 리디렉션하거나 작성하는 것입니다 (옵션 인 경우). 실제로 모바일 브라우저 x의 기능을 모르기 때문에 서버 측에서 감지 및 변경 논리를 수행하는 것이 가장 신뢰할 수있는 방법입니다. 물론, 서버 측 언어를 사용할 수 없다면 그 모든 것이 논점입니다. :)


6
iPad를 지원하지 않습니다. iPad를 지원하려면 ip (hone | od) 및 "| ad"를 찾습니다 (예 : ip (hone | od | ad)
Jayson Ragasa

3
detectmobilebrowser.com/에서 자바 스크립트를 시도했는데 IT 용으로는 작동하지 않습니다.
Milche Patern 2016 년

3
스크립트에 결함이 있기 때문에의가 대신 아이 패드 아이 패드를 사용하는 것이 @MilchePatern, 그것은 내가, 내 삼성 탭에 문제가 있었다 안드로이드 ISO를 사용했다, 작동 안드로이드 :
코엔 데이먼

13
jQuery 버전이 있으며 완벽하게 작동하지만 태블릿 감지를 |android|ipad|playbook|silk위해 about 섹션에 설명 된대로 추가해야합니다 (디자인에 따라
다름

3
예, 태블릿은 모바일이 아닙니다. 이 사이트를 dectect mobile browser라고 합니다.
Felix Eve

47

때때로 iPhone 스토어 또는 Android 마켓에 대한 링크와 같이 해당 장치에 특정한 콘텐츠를 표시하기 위해 클라이언트가 사용하는 브랜드 장치를 알아야합니다. Modernizer는 훌륭하지만 HTML5 또는 Flash와 같은 브라우저 기능 만 보여줍니다.

다음은 각 장치 유형마다 다른 클래스를 표시하는 jQuery의 UserAgent 솔루션입니다.

/*** sniff the UA of the client and show hidden div's for that device ***/
var customizeForDevice = function(){
    var ua = navigator.userAgent;
    var checker = {
      iphone: ua.match(/(iPhone|iPod|iPad)/),
      blackberry: ua.match(/BlackBerry/),
      android: ua.match(/Android/)
    };
    if (checker.android){
        $('.android-only').show();
    }
    else if (checker.iphone){
        $('.idevice-only').show();
    }
    else if (checker.blackberry){
        $('.berry-only').show();
    }
    else {
        $('.unknown-device').show();
    }
}

이 솔루션은 Graphics Maniacs http://graphicmaniacs.com/note/detecting-iphone-ipod-ipad-android-and-blackberry-browser-with-javascript-and-php/의 솔루션입니다.


이것은 잘 작동합니다. iPad 또는 Android 전화를 사용할 때 스크롤에서 실행되는 jQuery 기능을 비활성화해야했으며 다양한 장치의 화면 너비가 다르기 때문에 간단한 해결책이었습니다. 정말 감사합니다.
Eric Allen

안드로이드 테스트를 사용할 때의 유일한 문제는 안드로이드 사용자 에이전트를 사용하는 구석은
어떻습니까

우리가 특징 탐지 근본 주의자가 될 필요는 없다는 것을 보여주는 좋은 대답.
Fernando

44

http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/ 에서 해결책을 찾았습니다 .

var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};

그런 다음 모바일인지 확인하려면 다음을 사용하여 테스트 할 수 있습니다.

if(isMobile.any()) {
   //some code...
}

하위 문자열이 장치 유형과 직접 관련이 있다고 확신 할 수 있으면 사용자 에이전트 기반 솔루션이 잘 작동합니다. 즉, iPad = iPad입니다. 그러나 이제는 다양한 유형의 장치 (25,000 개 이상)가있어 ​​대부분의 비즈니스 목적에 맞게 접근 방법이 정확하지 않습니다. 신뢰할 수 있고 강력한 대안을 제공하기 위해 오픈 소스 프로젝트 51Degrees.com 을 설립했습니다 . JavaScript 및 서버 측에서도 작동합니다. 모든 문서는 여기에 있습니다 ... 51degrees.com/support/documentation
James Rosewell

나는 위에서도 잘 사용했지만 잘 작동했지만 이제는 안드로이드 5.1 이상에서는 작동하지 않습니다. 안드로이드 5.1 이상에서 변경된 것이 있습니까?
Imran Qamer

if (isMobile.Android ()) {document.getElementById ( "myAnchor"). setAttribute ( "href", " google.com" ); }
Amranur Rahman

25

"모바일"이 "작은 화면"을 의미하는 경우 다음을 사용합니다.

var windowWidth = window.screen.width < window.outerWidth ?
                  window.screen.width : window.outerWidth;
var mobile = windowWidth < 500;

iPhone에서는 window.screen.width가 320이됩니다. Android에서는 window.outerWidth가 480이됩니다 (Android에 따라 다를 수 있음). iPad와 Android 태블릿은 768과 같은 숫자를 반환하므로 원하는대로 전체 화면을 볼 수 있습니다.


1
왜 'window.screen.width'가 충분하지 않습니까? 'window.screen.width'또는 'window.outerWidth'중 작은 것을 취하는 것 같습니다. 왜 'outerWidth'에 관심이 있습니까? 답변 주셔서 감사합니다!
user1330974

16

당신이 사용하는 경우 모더 나이저를 , 그것은 매우 쉽게 사용할 수 있나요 Modernizr.touch앞서 언급 한 바와 같이.

그러나 Modernizr.touch안전한 사용을 위해 조합 및 사용자 에이전트 테스트를 사용하는 것이 좋습니다.

var deviceAgent = navigator.userAgent.toLowerCase();

var isTouchDevice = Modernizr.touch || 
(deviceAgent.match(/(iphone|ipod|ipad)/) ||
deviceAgent.match(/(android)/)  || 
deviceAgent.match(/(iemobile)/) || 
deviceAgent.match(/iphone/i) || 
deviceAgent.match(/ipad/i) || 
deviceAgent.match(/ipod/i) || 
deviceAgent.match(/blackberry/i) || 
deviceAgent.match(/bada/i));

if (isTouchDevice) {
        //Do something touchy
    } else {
        //Can't touch this
    }

Modernizr을 사용하지 않으면 Modernizr.touch위 의 함수를('ontouchstart' in document.documentElement)

또한 사용자 에이전트를 테스트 iemobile하면보다 다양한 탐지 된 Microsoft 모바일 장치를 제공 할 수 있습니다 Windows Phone.

또한이 SO 질문을 참조하십시오


다트에서도 마찬가지입니다 TouchEvent.supported.
Kai Sellgren

('ontouchstart' in window)Modernizr.touch또한 hacks.mozilla.org/2013/04/…
JVE999

modernizr이 훌륭한 솔루션이라고 생각합니다!
바비 러셀

|많은 일치 항목 대신 실제로 RegEx 를 사용해야 합니다. 또한 필요하지 않습니다 toLowerCase()당신이 있기 때문에 i수정을. 여기 : var isTouchDevice = Modernizr.touch || /iphone|ipod|ipad|android|iemobile|iphone|ipad|ipod|blackberry|bada/i.test(navigator.userAgent);
oriadam

14

당신은에 의존 할 수 navigator.userAgent없는 모든 장치는 실제 OS를 보여준다. 예를 들어 내 HTC에서 설정에 따라 다릅니다 ( "모바일 버전 사용"설정 / 해제). 에 http://my.clockodo.com , 우리는 단순히 사용하는 screen.width소형 장치를 탐지 할 수 있습니다. 불행히도 일부 안드로이드 버전에는 screen.width에 버그가 있습니다. 이 방법을 userAgent와 결합 할 수 있습니다.

if(screen.width < 500 ||
 navigator.userAgent.match(/Android/i) ||
 navigator.userAgent.match(/webOS/i) ||
 navigator.userAgent.match(/iPhone/i) ||
 navigator.userAgent.match(/iPod/i)) {
alert("This is a mobile device");
}

8
많은 휴대 전화의 가로 길이는 1000 이상입니다. 특히 가로 모드
oriadam

14

나는이 질문에 많은 답변이 있음을 알고 있지만 아무도 내가 본 것을 해결하는 방법으로 답변에 접근하지 못했음을 알았습니다.

CSS는 너비 (미디어 쿼리)를 사용하여 너비를 기준으로 웹 문서에 적용되는 스타일을 결정합니다. JavaScript에서 너비를 사용하지 않는 이유는 무엇입니까?

예를 들어 부트 스트랩의 (Mobile First) 미디어 쿼리에는 4 개의 스냅 / 브레이크 포인트가 있습니다.

  • 초소형 장치는 768 픽셀 이하입니다.
  • 소형 장치의 범위는 768 ~ 991 픽셀입니다.
  • 중형 장치의 범위는 992 ~ 1199 픽셀입니다.
  • 대형 장치는 1200 픽셀 이상입니다.

이를 사용하여 JavaScript 문제도 해결할 수 있습니다.

먼저 창 크기를 가져오고 응용 프로그램을보고있는 장치 크기를 확인할 수있는 값을 반환하는 함수를 만듭니다.

var getBrowserWidth = function(){
    if(window.innerWidth < 768){
        // Extra Small Device
        return "xs";
    } else if(window.innerWidth < 991){
        // Small Device
        return "sm"
    } else if(window.innerWidth < 1199){
        // Medium Device
        return "md"
    } else {
        // Large Device
        return "lg"
    }
};

이제 함수가 설정되었으므로 값을 ans store라고 부를 수 있습니다.

var device = getBrowserWidth();

당신의 질문은

브라우저가 핸드 헬드 장치에있는 경우 다른 스크립트를 실행하고 싶습니다.

이제 장치 정보가 남았으므로 if 문만 남았습니다.

if(device === "xs"){
  // Enter your script for handheld devices here 
}

다음은 CodePen의 예입니다. http://codepen.io/jacob-king/pen/jWEeWG


이것은 나를 위해 가장 잘 작동했습니다. 일부 모바일 전달 페이지에 부트 스트랩을 사용하고 있었기 때문에이 기술은 비 모바일 전달 (비 부트 스트랩)에서 부트 스트랩 페이지로 자동 리디렉션하는 데 효과적이었습니다. 팁 : IE11 F12 도구에서 작은 문제가 하나 있습니다. 모바일 장치의 F12 개발 도구에서 에뮬레이션이 설정되어 있고 창 크기를 감지하는 데 문제가있었습니다. xs 중단 점 아래에서 크기를 조정했지만 md로 감지했습니다. 전화 에뮬레이션을 끄고 페이지를 새로 고치 자마자 크기를 올바르게 감지했으며 코드에서 부트 스트랩 페이지로 리디렉션합니다.
Jeff Mergler

그것은 내가 잠시 찾고 있었다. 감사합니다!
개발자

2
@JacobKing 당신은 Small Devices range from 768 to 991 pixels.이것이 window.innerWidth < 9921199에 대해 동일한 것이 어야 함을 의미한다고 말했지만 대신 <1200이어야합니다.
medBouzid

13

한 줄의 자바 스크립트에서 :

var isMobile = ('ontouchstart' in document.documentElement && navigator.userAgent.match(/Mobi/));

사용자 에이전트에 'Mobi'(MDN 당)가 포함되어 있고 ontouchstart를 사용할 수있는 경우 모바일 장치 일 수 있습니다.


1
해야했다 /Mobi/.test(navigator.userAgent)... match나를 위해하지 않았다
BananaAcid

12

나는 아무도 멋진 사이트를 지적 없음을 놀라게하고있다 : http://detectmobilebrowsers.com/ 이있다 (를 포함하되 이에 국한되지 않음) 이동 감지를위한 다른 언어로 준비 만든 코드 :

  • 아파치
  • ASP
  • 씨#
  • IIS
  • 자바 스크립트
  • NGINX
  • PHP
  • 파이썬
  • 울타리

태블릿도 감지해야하는 경우 추가 RegEx 매개 변수에 대해서는 정보 섹션을 확인하십시오.

Android 태블릿, iPad, Kindle Fires 및 PlayBook은 의도적으로 감지되지 않습니다. 태블릿에 대한 지원을 추가하려면 |android|ipad|playbook|silk첫 번째 정규식에 추가하십시오 .


나에게 그것은 효과가 있었지만, 어떤 코드를 사용하고 어디에 문제가 있는지 더 구체적으로 설명 할 수 있습니까?
Maksim Luzik

해당 페이지는 응답입니다. 다른 모든 응답은 해당 페이지의 복사 붙여 넣기
Rubén Ruíz

11

작은 디스플레이에 대해 특별히 걱정하지 않으면 너비 / 높이 감지를 사용할 수 있습니다. 따라서 너비가 특정 크기보다 작 으면 모바일 사이트가 시작됩니다. 완벽한 방법은 아니지만 여러 장치를 감지하는 것이 가장 쉬운 방법 일 것입니다. iPhone 4 용으로 큰 것을 넣어야 할 수도 있습니다 (큰 해상도).


9

제어 계층을 추가하려면 HTML5 저장소를 사용하여 모바일 저장소 또는 데스크톱 저장소를 사용하고 있는지 감지합니다. 브라우저가 스토리지를 지원하지 않으면 모바일 브라우저 이름 배열이 있으며 사용자 에이전트를 배열의 브라우저와 비교합니다.

꽤 간단합니다. 기능은 다음과 같습니다.

// Used to detect whether the users browser is an mobile browser
function isMobile() {
    ///<summary>Detecting whether the browser is a mobile browser or desktop browser</summary>
    ///<returns>A boolean value indicating whether the browser is a mobile browser or not</returns>

    if (sessionStorage.desktop) // desktop storage 
        return false;
    else if (localStorage.mobile) // mobile storage
        return true;

    // alternative
    mobile = ['iphone','ipad','android','blackberry','nokia','opera mini','windows mobile','windows phone','iemobile','tablet','mobi']; 
    var ua=navigator.userAgent.toLowerCase();
    for (var i in mobile) if (ua.indexOf(mobile[i]) > -1) return true;

    // nothing found.. assume desktop
    return false;
}

1
localStorage를 기반으로 한 가정은 매우 흥미 롭습니다. 스크립트와 정확하게 일치하는 지원되는 장치 또는 브라우저를 제공 할 수 있습니까? 필자가 요청한 이 질문에 대한 해결책을 찾는 데 관심이 있으며 모바일 태블릿 브라우저를 감지하는 것은 실제로 흥미로운 해결 방법이 될 수 있습니다.
Gruber

9

확인 만 navigator.userAgent항상 신뢰할 수있는 것은 아닙니다. 또한 확인하여 더 큰 신뢰성을 얻을 수 있습니다 navigator.platform. 이전 답변에 대한 간단한 수정이 더 잘 작동하는 것 같습니다.

if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||
   (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform))) {
    // some code...
}

5
의견을 남기지 않고 임의로 답을 내리는 것은 허용되지 않아야합니다. 기껏해야 무례합니다.
Mark

8

나는 당신이 http://wurfl.io/ 를 확인하는 것이 좋습니다

간단히 말해서 작은 JavaScript 파일을 가져 오는 경우 :

<script type='text/javascript' src="//wurfl.io/wurfl.js"></script>

다음과 같은 JSON 객체가 남습니다.

{
 "complete_device_name":"Google Nexus 7",
 "is_mobile":true,
 "form_factor":"Tablet"
}

(물론 Nexus 7을 사용한다고 가정하면) 다음과 같은 작업을 수행 할 수 있습니다.

if(WURFL.is_mobile) {
    //dostuff();
}

이것은 당신이 찾고있는 것입니다.

면책 조항 : 나는이 무료 서비스를 제공하는 회사에서 일합니다.


Wurfl에서 nexus7 및 iPad mini를 감지하지 못했습니다!
Jacob

Nexus 7에 문제가있는 것 같습니다. 설정에 Nexus 스푸핑 UA 문자열이 없습니까? 아이 패드 미니에 관한 한, 그것은 다른 아이 패드와 구별하기가 매우 어렵지만 여전히 아이 패드로 인식 되었습니까? 당신은 내 게시물을 downvoted입니까?
Luca Passani

아니요, ipad mini는 데스크탑 장치로 감지되었습니다
Jacob

7

게시물을 확인하십시오. 터치 장치가 감지 될 때 수행 할 작업이나 터치 시작 이벤트가 호출 될 때 수행 할 작업에 대한 훌륭한 코드 스 니펫을 제공합니다.

$(function(){
  if(window.Touch) {
    touch_detect.auto_detected();
  } else {
    document.ontouchstart = touch_detect.surface;
  }
}); // End loaded jQuery
var touch_detect = {
  auto_detected: function(event){
    /* add everything you want to do onLoad here (eg. activating hover controls) */
    alert('this was auto detected');
    activateTouchArea();
  },
  surface: function(event){
    /* add everything you want to do ontouchstart here (eg. drag & drop) - you can fire this in both places */
    alert('this was detected by touching');
    activateTouchArea();
  }
}; // touch_detect
function activateTouchArea(){
  /* make sure our screen doesn't scroll when we move the "touchable area" */
  var element = document.getElementById('element_id');
  element.addEventListener("touchstart", touchStart, false);
}
function touchStart(event) {
  /* modularize preventing the default behavior so we can use it again */
  event.preventDefault();
}

'ontouchstart' in document.documentElement터치 지원에 대한 테스트보다 낫습니다 window.Touch. 더 나은 방법은 Modernizr.js ( modernizr.com )를 사용 하는 것입니다. 터치 감지를 올바르게 시도하려고 많은 생각을했기 때문입니다. 개발 코드를보고 "touch"를 검색하면 modernizr.com/downloads/modernizr.js 에서 해당 터치 감지 코드를 볼 수 있습니다 .
robocat

3
일부 새로운 Windows 8 랩톱은 Chrome에서 터치 스크린으로 감지되어 이상한 결과를 초래하기 때문에 터치 감지에 문제가 생겼습니다.
JWarner

6

다음은 모바일 브라우저에서 실행 중인지 여부에 대한 참 / 거짓 답변을 얻는 데 사용할 수있는 기능입니다. 예, 브라우저 스니핑이지만 때로는 정확히 필요한 것입니다.

function is_mobile() {
    var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry'];
    for(i in agents) {
        if(navigator.userAgent.match('/'+agents[i]+'/i')) {
            return true;
        }
    }
    return false;
}

1
많은 모바일 브라우저, 특히 모바일 크롬을 감지하지 못할 것입니다. 그것은 아마도 오페라 모바일, 파이어 폭스 모바일, 오페라 미니, 다양한 인기있는 중국 모바일 브라우저 등에서 실패 할 것입니다.
robocat

당신은 이것을 필요 for로 하지 않습니다 ! + RegExp를 만드는 것을 잊었습니다. 다음은 더 간단한 것입니다 :return !!navigator.userAgent.match(new RegExp(agents.join('|'),'i'))
oriadam

6

모든 답변은 사용자 에이전트를 사용하여 브라우저를 감지하지만 사용자 에이전트를 기반으로 한 장치 감지는 그다지 좋은 해결책이 아닙니다. 터치 장치와 같은 기능을 감지하는 것이 좋습니다 (새로운 jQuery에서는 제거 $.browser하고 $.support대신 사용).

모바일을 감지하려면 터치 이벤트를 확인할 수 있습니다.

function is_touch_device() {
  return 'ontouchstart' in window // works on most browsers 
      || 'onmsgesturechange' in window; // works on ie10
}

JavaScript를 사용하여 '터치 스크린'장치를 감지하는 가장 좋은 방법무엇입니까?


4
불행히도, 이것은 신뢰할 수 없으며 어쨌든 true터치 스크린이있는 데스크탑 PC에서 반환 됩니다. stucox.com/blog/you-cant-detect-a-touchscreen
JustAMartin

1
터치 스크린과 완벽한 브라우저 환경을 갖춘 노트북을 잊지 마십시오. :-)
Mike Kormendy 5

이것은 모바일 장치인지 아닌지를 확인하는 방법이 아니지만 기능 이름에 따르면 터치 지원 장치를 확인하는 것이 완벽합니다. 내 +1 ;-)
Kathara

6

장치 유형이 사용되고 있는지 확인하기 위해 다음 문자열 콤보를 사용하는 것이 좋습니다.

당으로 모질라 문서 문자열 Mobi을 권장합니다. 그러나 오래된 태블릿 중 일부는Mobi 사용 사용해야합니다.Tablet 문자열도 합니다.

마찬가지로, 안전한쪽에 iPad있고iPhone 문자열과 같은 장치 유형을 확인하는데 사용될 수있다.

대부분의 새 장치는 문자열 만 반환 true합니다 Mobi.

if (/Mobi|Tablet|iPad|iPhone/.test(navigator.userAgent)) {
    // do something
}

3
태블릿 작업을하려면 거기에 "android"를 추가해야했습니다. 조정해야하지만 접근 방식이 마음에 듭니다.
Andy

6

미디어 쿼리를 사용하여 쉽게 처리 할 수 ​​있습니다.

isMobile = function(){
    var isMobile = window.matchMedia("only screen and (max-width: 760px)");
    return isMobile.matches ? true : false
}

나는이 접근법을 좋아 window.matchMedia("(pointer:coarse)").matches;하고 다른 대답에서 벗어났습니다 .
Jason Lydon

6

큰 답변 감사합니다. Windows Phone 및 Zune을 지원하기위한 작은 개선 사항 :

if (navigator.userAgent.match(/Android/i) ||
  navigator.userAgent.match(/webOS/i) ||
  navigator.userAgent.match(/iPhone/i) ||
  navigator.userAgent.match(/iPad/i) ||
  navigator.userAgent.match(/iPod/i) ||
  navigator.userAgent.match(/BlackBerry/) ||
  navigator.userAgent.match(/Windows Phone/i) ||
  navigator.userAgent.match(/ZuneWP7/i)
) {
  // some code
  self.location = "top.htm";
}

모바일 장치의 호버링 / 드래깅 이벤트를 처리하려는 경우 이것이 가장 간단한 방법 일 것입니다. 이런 식으로 "isMobile"부울을 생성 한 다음 모든 호버 / 마우스 오버 이벤트를 확인합니다. 어쨌든 내 두 센트입니다. 사용자 상호 작용이 필요한 더 많은 js 라이브러리 또는 코드를 추가하는 것은 나에게 의미가 없습니다. 그래도 내가 틀렸다면 정정하십시오.
MeanMatt

3
정규 표현식을 사용하고 있으므로 실제로 다음을 사용하십시오.if (navigator.userAgent.match(/Android|webOS|iPhone|iPad|etc/)){self.location = "top.htm"}
foobarbecue

5

이것을 사용하십시오 :

/**  * jQuery.browser.mobile (http://detectmobilebrowser.com/)  * jQuery.browser.mobile will be true if the browser is a mobile device  **/ (function(a){jQuery.browser.mobile=/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/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|e\-|e\/|\-[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|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

그런 다음 이것을 사용하십시오 :

if(jQuery.browser.mobile)
{
   console.log('You are using a mobile device!');
}
else
{
   console.log('You are not using a mobile device!');
}

5

http://detectmobilebrowser.com/ 기반의 간단한 기능

function isMobile() {
    var a = navigator.userAgent||navigator.vendor||window.opera;
    return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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/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(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));
}

5
<script>
  function checkIsMobile(){
      if(navigator.userAgent.indexOf("Mobile") > 0){
        return true;
      }else{
        return false;
      }
   }
</script>

브라우저로 이동하여 navigator.userAgent를 얻으려고하면 다음과 같은 브라우저 정보가 표시됩니다.

Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit / 537.36 (Gcko와 같은 KHTML) Chrome / 64.0.3282.186 Safari / 537.36

당신이 모바일에서 할 때도 같은 일이 벌어 질 것입니다

Mozilla / 5.0 (Linux; Android 8.1.0; Pixel Build / OPP6.171019.012) AppleWebKit / 537.36 (Gcko와 같은 KHTML) Chrome / 61.0.3163.98 모바일 Safari / 537.36

모든 모바일 브라우저에는 "모바일"이 포함 된 문자열이있는 useragent가 있으므로 코드에서 위의 스 니펫을 사용하여 현재 사용자 에이전트가 웹 / 모바일인지 확인합니다. 결과에 따라 필요한 변경을 수행합니다.


4

나는 이것을 사용한다

if(navigator.userAgent.search("mobile")>0 ){
         do something here
}

4

어떻게 mobiledetect.net ?

다른 솔루션은 너무 기본적으로 보입니다. 이것은 가벼운 PHP 클래스입니다. 특정 HTTP 헤더와 결합 된 User-Agent 문자열을 사용하여 모바일 환경을 감지합니다. WordPress, Drupal, Joomla, Magento 등의 타사 플러그인을 사용하여 Mobile Detect의 혜택을 누릴 수도 있습니다.


질문이 jQuery를 요청했기 때문에?
Craicerjack

3

사용자 에이전트 문자열은 단독으로 신뢰할 수 없습니다. 아래 솔루션은 모든 상황에서 작동합니다.

function isMobile(a) {
  return (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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|xda|xiino/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(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)));
}

이 함수를 호출하십시오.

isMobile(navigator.userAgent || navigator.vendor || window.opera)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.