2013-12-12 5 views
0

브라우저 검색 및 기능 감지에 관한 몇 가지 스레드를 읽었으므로, 내가해야 할 일이 해당 토론의 범주에 속하는지 정확히 알지 못합니다.브라우저 감지 - 모바일 대 PC

게임 사이트가 있습니다. 사람들은 PC 나 모바일 장치로 게임을 즐길 수 있습니다. 또한 게임을 어떻게 작동 시킬지 구성 할 수 있습니다. 예를 들어, 카드를 한 번 클릭하거나 두 번 클릭하여 카드를 재생할 수 있습니다. 그러나 휴대 기기에서는 두 번 클릭하는 옵션 옵션이 없으므로 일부 옵션은 선택 옵션을 선택하고 자바 스크립트가 작동하지 않기 때문에 멈추는 경우가 있습니다.

나는 사람들이 모바일 장치에 대한 기본 설정 한 세트와 PC에 대한 기본 설정을 지정하게하고 해당 장치에서 사용할 수있는 옵션 만 제공 할 것이라고 생각했습니다. 그러나 필자는 PC와 모바일 장치를 탐지하는 것이 나쁜 방법이라는 것을 읽었습니다.

그렇다면 기능을 감지하면 정확히 무엇을 감지합니까? 장치가 두 번 클릭을 특별히 지원하는지 감지 할 수있는 방법은 없습니다.

+0

귀하의 문제는 터치 UI 대 커서 UI 인 것으로 보입니다.이 UI는 모바일 대 PC (아마도 데스크톱)와 반드시 상관 관계가있는 것은 아닙니다. 커서 (또는 포인팅 장치)에 대한 터치 및 설정에 대한 설정을 제공하고 사용자가 둘 중 하나를 선택할 수있게합니다. – RobG

+0

그래서 나는 이것을했다. (이론적으로는 올바르다.) 실제로 어떻게 이것에 대해 가야 할까? Modernizr.touch를 사용하여 특정 브라우저에서 터치 기능이 활성화되어 있는지 여부를 확인하려고 시도했지만 작동하지 않습니다 (또는 어떻게 작동하는지 예상하지 못합니다). – a2zCribbage

+0

나는 터치 지원을위한 간단한 기능 테스트를 가지고 있으며, 몇 시간 안에 게시 할 것입니다. – RobG

답변

0

많은 기기가 너무 많아 지속적으로 변경되기 때문에 웹 사이트에 효율적으로 액세스하는 PC 나 휴대 기기가 어디인지를 감지 할 수 없습니다. 이를 수행하는 유일한 방법은 꽤 지루한 브라우저 에이전트 문자열을 검사하는 것입니다. 그것의 수천이 있습니다. 또한 스푸핑 될 수 있으므로 좋은 정보원이 아닙니다. 당신이 할 수있는 최선 (나를 포함한 많은 전문가들이하는 것)은 화면 해상도, 지원되는 HTML 태그, 지원되는 CSS 속성 등의 기능 감지 기술을 사용하고 있습니다.

좋은 도구는 기능이있는 Modenizr js 라이브러리입니다. 기반으로 장치가 터치 이벤트를 지원하는지 여부를 확인할 수 있습니다. 그렇다면 두 번 클릭하는 것이 옵션이 아님을 알고 있습니다.

여기 http://modernizr.com/docs/#features-misc

+0

할 수만 있다면 투표 할 수 있지만 명성이 없습니다. 나는 Modernizr에 갔고 터치 피쳐 탐지를 구현했는데 지금은 내 사이트에서 아주 안좋은 위치에 있습니다. 작동하지 않습니다! 컴퓨터에 내 사이트에 수많은 사람들이 방문하고 있으며, 모더니어는 실제로 터치가 가능한 장치를 사용하고 있다고 말하고 있습니다. 나는 사람들이 Modernizr을 사용하여 터치 감지를 피하는 것을 강력히 권장합니다! – a2zCribbage

+0

다음은 그 예입니다. 이 브라우저/OS 조합은 터치에 대해 "true"를 반환하지만 터치 장치가 아닙니다. (Windows NT 6.2;) AppleWebKit/537.36 (Gecko와 같은 KHTML) Chrome/31.0.1650.57 Safari/537.36 – a2zCribbage

+0

Ok, 공평하게 Modernizr이 올바른 일을하고 있다고 생각합니다. 방금 잘못된 질문을했습니다. 나는 (잘못), 터치 장치를 가지고 있으면 더블 클릭을 사용할 수 없다고 생각했다. 실제로 일부 장치는 두 장치를 모두 지원합니다. 내가 실제로해야 할 일은이 답변에서 제안한 것처럼 터치 장치를 감지하는 것이 아니라 장치가 두 번 클릭을 지원하는지 여부를 감지하는 것입니다. 위의 대답에서이 문장 (및 저의 생각 역시!)은 틀린 것입니다. "그렇다면 더블 클릭이 옵션이 될 수 없다는 것을 알고 있습니다." 일부 장치는이 두 가지를 모두 지원하기 때문입니다. – a2zCribbage

1

은 당신이 정말로 원하는 것은 터치 지원을위한 시험, Detecting touch: it’s the ‘why’, not the ‘how’을 시도 할 것 같다 일부 문서에 대한 링크입니다.

if (document && document.element && 'ontouchstart' in document.documentElement) { 
    ... 
} 

그러나 일부 브라우저에서 실패 할 가능성이 높습니다 :

일반적인 제안입니다. 아마 더 정확하지만 더 긴 방법은 직접 이벤트 지원을 테스트하는 것입니다 : 다른 곳에서 작동하는 것 같다하지만

그것은 2008 년에 기록 된
/* Feature tests for TouchEvent and GestureEvent modules 
    * implemented in Mobile Safari on iPhone 
    * 
    * The TouchEvent module is a draft (18/08/2008) that supports: 
    * 
    * touchstart 
    * touchmove 
    * touchend 
    * touchcancel 
    * 
    * The GestureEvent module is a draft (18/08/2008) 
    * that supports: 
    * 
    * gesturestart 
    * gesturechange 
    * gestureend 
    * 
    * The functions require support for try..catch, introduced 
    * in ECMA-262 ed3, JavaScript 1.4 and JScript 5.1.5010. 
    * Equates to Navigator 4.0 or later and IE 5.1 or later 
    * (http://pointedears.de/scripts/es-matrix/) 
    * 
    * If W3C DOM 2 Event document.createEvent is supported, 
    * return either true or false, 
    * otherwise return undefined. 
    */ 
    function touchSupported() { 
    if (document && document.createEvent) { 
     try { 
     document.createEvent('TouchEvent'); 
     return true; 
     } catch (e) { 
     return false; 
     } 
    } 
    } 

    function gestureSupported() { 
    if (document && document.createEvent) { 
     try { 
     document.createEvent('GestureEvent'); 
     return true; 
     } catch (e) { 
     return false; 
     } 
    } 
    } 

, 나는 단지 정말 사파리와 아이폰에 사용했습니다. 철저히 시험하십시오.