모바일 에이전트 자동 감지 (사용자 에이전트를 통해?) [닫기]


291

사용자가 모바일 웹 브라우저에서 내 웹 사이트를보고 있는지 감지하여 적절한 버전의 웹 사이트를 자동으로 감지하여 표시하려면 어떻게해야합니까?


12
iPad는 중요합니까? :)
Seva Alekseyev

33
세바의 의견은 좋은 질문을 제기합니다. 오늘날 "모바일"은 무엇을 의미합니까? 브라우저는 있지만 그다지 많지 않은 "기능 전화"를 가리 킵니까? 입력 방법과 디스플레이 해상도가 제한 요소 인 완전한 기능을 갖춘 스마트 폰을 의미합니까? 상호 작용하기 쉽고 고해상도 디스플레이가있는 태블릿은 어떻습니까? 미디어 센터와 같은 장치는 거실을 떠나지 않지만 비슷한 한계가 있습니다. 직장 친구가 나에게 이것을 보냈다. 나는 그것이 매우 통찰력이 있다는 것을 알았습니다. slideshare.net/bryanrieger/rethinking-the-mobile-web-by-yiibu
spaaarky21

1
@Ricki 그러나 ipad에서는 플래시 콘텐츠를 표시하거나 tinymce와 같은 자바 스크립트 기반의 풍부한 텍스트 편집기를 사용할 수 없습니다.
TJ Ellis

1
ipad는 플래시를 볼 수 없지만 브라우저가 플래시를 지원하는지 감지와 같은 다른 주제입니다.
Shaun

2
미래의 게시물이지만 사이트의 모바일 버전을 제공하는 데 관심이있는 사람은 "반응 형 디자인"에 대한 기사를 볼 수 있습니다.
Vael Victus

답변:


91

예, User-Agent 헤더를 읽으면 유용한 정보를 얻을 수 있습니다.

몇 가지가 있습니다 목록 밖으로 당신이 처음부터 시작할 필요가 없습니다가 알려진 모바일 사용자 에이전트는. 내가해야 할 때 알려진 사용자 에이전트의 데이터베이스를 작성하고 수정을 위해 감지 된 알 수없는 것을 저장 한 다음 수동으로 무엇인지 파악하는 것입니다. 이 마지막 일은 경우에 따라 과도 할 수 있습니다.

Apache 레벨에서 수행하려면 다음과 같이 사용자 에이전트를 검사하는 재 작성 규칙 세트를 주기적으로 생성하는 스크립트를 작성할 수 있습니다 (또는 한 번만 새 사용자 에이전트를 잊어 버리거나 한 달에 한 번).

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} (OneMobileUserAgent|AnotherMobileUserAgent|...)
RewriteRule (.*) mobile/$1

예를 들어 http : //domain/index.html 에 대한 요청은 http : //domain/mobile/index.html 로 이동합니다 .

스크립트가 htaccess 파일을 주기적으로 재생성하는 방식이 마음에 들지 않으면 사용자 에이전트를 검사하는 모듈을 작성할 수 있습니다 (이미 만든 것이 없지만 특히 적절한 예를 찾았습니다 ). 일부 사이트에서 업데이트합니다. 그런 다음 원하는 방식으로 접근 방식을 복잡하게 만들 수 있지만 귀하의 경우 이전 방식은 좋을 것이라고 생각합니다.


3
PHP와 같은 스크립팅 언어를 사용하는 대신 웹 서버 계층 (Apache)에서 .htaccess 명령을 통해이를 달성 할 수 있습니까?

user-agent가 문서 루트를 설정하는 아이디어
Carson

126

Detect Mobile Browser 에는 Apache, ASP, ColdFusion, JavaScript 및 PHP에서이를 수행 하는 오픈 소스 스크립트가 있습니다 .


5
@guitar이 경우 UA로 보내야합니다.
Adam Tuttle

9
Bleh ... 나는이 해결책의 "코드 냄새"를 정말로 싫어한다. 4 자리 접두사를 사용하여 정규 표현식을 일치시킵니다. 처음에는 원래 어디에서 왔는지 전혀 알지 못합니다.
우리 모두 모니카

2
그것은 하나의 끔찍한 정규 표현식입니다. 코드 냄새가 좋지 않습니다.
Jack Cox

5
라이센스가없고 업데이트 표시가없는 "오픈 소스"솔루션이 마음에 들지 않습니다.
Eduardo

12
그래도 주변에는 방법이 없습니다. 어떤 수준에서 어떤 유형의 솔루션이든 사용자 에이전트에서 정규식 검사를 수행합니다.
Kyle

33

그냥 생각하지만이 문제를 반대 방향에서 일하면 어떨까요? 어떤 브라우저가 모바일인지 결정하지 않고 왜 어떤 브라우저가 아닌 브라우저를 결정하지 않습니까? 그런 다음 사이트를 모바일 버전으로 기본 코딩하고 표준 버전으로 리디렉션하십시오. 모바일 브라우저를 볼 때 두 가지 기본 가능성이 있습니다. 자바 스크립트를 지원하거나 지원하지 않습니다. 따라서 브라우저가 자바 스크립트를 지원하지 않으면 기본적으로 모바일 버전으로 설정됩니다. JavaScript를 지원하는 경우 화면 크기를 확인하십시오. 특정 크기 이하의 것은 모바일 브라우저 일 수도 있습니다. 더 큰 것은 표준 레이아웃으로 리디렉션됩니다. 그런 다음 JavaScript를 사용하지 않는 사용자가 모바일인지 아닌지를 결정하기 만하면됩니다.
W3C에 따르면 JavaScript가 비활성화 된 사용자의 수는 약 5 %였으며 대부분의 사용자가 브라우저를 끈다는 사실을 암시했습니다. 그들은 당신의 청중의 큰 부분입니까? 그렇지 않다면 걱정하지 마십시오. 그렇다면 최악의 시나리오는 무엇입니까? 해당 사용자가 모바일 버전의 사이트를 탐색하고 있다는 것은 좋은 일입니다.


3
이것은 매우 좋은 생각입니다, 나는 그것이 우아한 해결책이라고 생각합니다.
Maxim Veksler

3
+1 이것은 꽤 좋은 생각처럼 들리지만 검색 엔진 크롤러에 영향을 줍니까?
Mikey G

이것은 잘못된 생각입니다. 자바 스크립트를 비활성화하는 브라우저 확장 프로그램은 데스크탑 브라우저에서 매우 인기가 있으므로, 자바 스크립트가 없다는 것은 모바일이 잘못되었음을 의미한다고 가정합니다. 창 / 뷰포트 / 화면 해상도는 브라우저 크기와 아무 관련이 없으며, 저해상도라고 가정하면 핸드 헬드 크기가 웹 앱을 추악하고 많은 사용자에게 실망시킬 것입니다. (예 : 전체 화면이 아닌 창에있는 데스크톱 브라우저, 큰 태블릿)
ʇsәɹoɈ

31

다음은 JavaScript에서 수행하는 방법입니다.

function isMobile() {
  var index = navigator.appVersion.indexOf("Mobile");
  return (index > -1);
}

www.tablemaker.net/test/mobile.html 에서 예제를 참조하십시오. 이 글꼴은 휴대폰에서 글꼴 크기가 세 배입니다.


계정을 병합하려면 여기를 참조하십시오 : meta.stackexchange.com/questions/18232/…
Brandon

태블릿 (예 : iPad)에서는 작동하지 않습니다.
Si8

Opera Mobile로 인해 "mobi"를 사용하십시오.
mgutt

1
사용자 에이전트에서 "mobi"를 사용하지 않는 드문 브라우저 중 하나이므로 "Opera Mini"가 필요합니다.
mgutt

17

내가 가장 좋아하는 모바일 브라우저 감지 메커니즘은 WURFL 입니다. 자주 업데이트되며 모든 주요 프로그래밍 / 언어 플랫폼에서 작동합니다.


좋지만 "모든 주요 프로그래밍 / 언어 플랫폼에서 작동"이라는 문장은 약간 과감합니다.
Kyle


이제는 구매하지 않는 한 성가신 AGPL 라이센스 하에서 만 사용할 수 있습니다. en.wikipedia.org/wiki/WURFL#License_update
MarkJ

17

css3 미디어 쿼리 사용을 고려 했습니까? 대부분의 경우 별도의 모바일 버전 사이트를 만들지 않고도 대상 장치에 특별히 CSS 스타일을 적용 할 수 있습니다.

@media screen and (max-width:1025px) {
   #content {
     width: 100%;
   }
}

너비는 원하는대로 설정할 수 있지만 1025는 iPad 가로보기를 사용합니다.

또한 다음 메타 태그를 머리에 추가하고 싶을 것입니다.

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

좋은 예는 HTML5 Rocks 에서이 기사 를 확인하십시오.


1
나는 이것이 실제로 가장 좋은 방법이라고 생각합니다. 사용자 에이전트 문자열을 보는 스크립트가 오래되었습니다. 사용 가능한 화면 공간을 살펴보면 새로운 장치가 감지되지 않아도 걱정없이 반응 형 디자인이 가능합니다.
Adam Tuttle

1
이것은 클라이언트 측 탐지에만 작동합니다. 그러나 서버 측이 모바일 클라이언트와 다르게 동작하게하려면 다른 기술을 사용해야합니다.
Igor Brejc

전체 화면을 실행하지 않는 데스크톱 브라우저의 경우 비참하게 실패합니다. 어쨌든 선택하면 막대한 글꼴과 여백으로 화면 공간을 낭비하거나 드롭 다운 메뉴 뒤에 중요한 기능 / 정보를 숨기지 마십시오. 사이트 / 앱이 추악하고 일부 사용자에게는 실망 스러울 것입니다.
ʇsәɹoɈ

13

대한 안드로이드, 아이폰, 아이 패드, 블랙 베리, 팜, WINDOWS CE, PALM

 <script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>------------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>------------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
                   else if ((userAgent.search("blackberry") > -1))
                       document.write("<b> BLACKBERRY DEVICE <br>")
                   else if ((userAgent.search("iphone") > -1))
                       document.write("<b> IPHONE DEVICE <br>")              
                   else if ((userAgent.search("ipod") > -1))
                       document.write("<b> IPOD DEVICE <br>")
               else if ((userAgent.search("ipad") > -1))
                       document.write("<b> IPAD DEVICE <br>")
                       else
                   document.write("<b> UNKNOWN DEVICE <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>

나는 이것이 매우 도움이된다는 것을 알았다.
bozdoz 2016

이 모든 것을 처리 할 Conditionizr을 반드시 확인해야합니다! 사용자 정의 테스트를 추가하고 객체 테스트 및 콜백을 통해 가져올 수 있습니다. 또한 다양한 사전 제작 테스트를 수행 할 수 있습니다. conditionizr.com/detects
Halcyon991

Elenasys, 유용한 답변 감사합니다. 그러나 내 DB에서 "windows \ sce"와 일치하는 UA를 찾을 수 없습니다.
nefski

1
Windows Phone에서는 작동하지 않습니다.
jwerre

감사합니다. 그러나 Windows Phone이 지정되지 않았습니다 ...
Jorgesys

6

모바일 장치 브라우저 파일은 ASP.NET 프로젝트의 모바일 (및 기타) 브라우저를 감지하는 좋은 방법입니다. http://mdbf.codeplex.com/


모바일 장치 브라우저가 계속 작동합니까? 오프라인 상태에 대한 표기법이 있습니까? ...
creativeedg10

5

를 통해 모바일 클라이언트를 간단하게 navigator.userAgent감지하고 감지 된 클라이언트 유형을 기반으로 대체 스크립트를 다음과 같이로드 할 수 있습니다 .

 $(document).ready(function(e) {

        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/i)
          || navigator.userAgent.match(/Windows Phone/i)) {

         //write code for your mobile clients here.

          var jsScript = document.createElement("script");
          jsScript.setAttribute("type", "text/javascript");
          jsScript.setAttribute("src", "js/alternate_js_file.js");
          document.getElementsByTagName("head")[0].appendChild(jsScript );

          var cssScript = document.createElement("link");
          cssScript.setAttribute("rel", "stylesheet");
          cssScript.setAttribute("type", "text/css");
          cssScript.setAttribute("href", "css/alternate_css_file.css");
          document.getElementsByTagName("head")[0].appendChild(cssScript); 

    }
    else{
         // write code for your desktop clients here
    }

    });

보다 관리하기 쉬운 솔루션을 위해 Conditionizr을 사용하면이 모든 것을 처리 할 수 ​​있습니다! 사용자 정의 테스트를 추가하고 객체 테스트 및 콜백을 통해 가져올 수 있습니다. 또한 다양한 사전 제작 테스트를 수행 할 수 있습니다. conditionizr.com/detects
Halcyon991

4

User-Agent 문자열을 확인할 수 있습니다. JavaScript에서는 정말 쉽습니다. 네비게이터 객체의 속성 일뿐입니다.

var useragent = navigator.userAgent;

JS의 iPhone 또는 Blackberry가 다음과 같은 장치인지 여부를 확인할 수 있습니다.

var isIphone = !!agent.match(/iPhone/i),
    isBlackberry = !!agent.match(/blackberry/i);

isIphone이 true 인 경우 Iphone에서 사이트에 액세스하고 있고 isBlackBerry 인 경우 Blackberry에서 사이트에 액세스하고 있습니다.

firefox 용 "UserAgent Switcher"플러그인을 사용하여 테스트 할 수 있습니다.

당신도 관심이 있다면, 그것은 내 스크립트 체크 아웃 가치가 될 수있다 "redirection_mobile.js" 여기 GitHub의에서 호스팅을 https://github.com/sebarmeli/JS-Redirection-Mobile-Site 당신이 중 하나에 대한 자세한 내용을 읽을 수 있습니다 내 기사는 다음과 같습니다.

http://blog.sebarmeli.com/2010/11/02/how-to-redirect-your-site-to-a-mobile-version-through-javascript/


1
.match를 사용하는 것이 여기에서 잘못되었습니다. 부울 값으로 평가되는 .test ()를 사용하려고합니다. .match ()보다 훨씬 빠르며 배열을 반환하지 않습니다. userAgent 테스트에 대해보다 관리하기 쉬운 솔루션을 위해이 모든 것을 처리하는 Conditionizr을 사용할 수 있습니다! 사용자 정의 테스트를 추가하고 객체 테스트 및 콜백을 통해 가져올 수 있습니다. 또한 다양한 사전 제작 테스트를 수행 할 수 있습니다. conditionizr.com/detects
Halcyon991

4
protected void Page_Load(object sender, EventArgs e)
{
    if (Request.Browser.IsMobileDevice == true)
    {
        Response.Redirect("Mobile//home.aspx");
    }
}

이 예제는 asp.net에서 작동합니다


3

어떤 언어를 사용하고 있는지 말하지 않았습니다. 그것이 Perl이라면 사소한 것입니다 :

use CGI::Info;

my $info = CGI::Info->new();

if($info->is_mobile()) {
   # Add mobile stuff
}

unless($info->is_mobile()) {
   # Don't do some things on a mobile
}


0

예, 사용자 에이전트는 모바일 브라우저를 감지하는 데 사용됩니다. 이를 확인하는 데 사용할 수있는 무료 스크립트가 많이 있습니다. 다음은 모바일 사용자를 다른 웹 사이트로 리디렉션하는 데 도움이되는 PHP 코드 입니다.


1
PHP를 사용하는 대신 웹 서버 계층 (Apache)에서 .htaccess 명령을 통해이를 수행 할 수 있습니까?

0

이 데모를 스크립트와 예제를 함께 사용하여 넣었습니다.

http://www.mlynn.org/2010/06/mobile-device-detection-and-redirection-with-php/

이 예제는 사용자 에이전트 감지를 위해 php 기능을 사용하며 사용자가 일반적으로 브라우저 또는 장치 유형에 따라 기본값이 아닌 사이트 버전에 대한 기본 설정을 지정할 수있는 추가 이점을 제공합니다. 이것은 쿠키로 수행됩니다 (자바 스크립트와 달리 서버 측에서 PHP를 사용하여 유지 관리).

예제를 보려면 기사의 다운로드 링크를 확인하십시오.

당신이 즐기시기 바랍니다!


0

MobileESP 에는 PHP, Java, APS.NET (C #), Ruby 및 JavaScript 후크가 있습니다. 또한 Apache 2 라이센스도 있으므로 상업적으로 무료로 사용할 수 있습니다. 나에게 중요한 것은 화면 크기와 다른 메트릭스가 아닌 브라우저와 플랫폼 만 식별하므로 크기를 작게 유지하는 것입니다.


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