2012-09-24 1 views
10

나는 모바일 및 데스크톱 브라우저에서 터치 지원을 테스트하기 위해Chrome이 표준 테스트에 실패하여 이제 Touch-Events를 테스트하는 방법은 무엇인가요?

var supportsTouch = 'ontouchstart' in document; 

에 의존하는 데 사용됩니다. 이 테스트를 기반으로 eventListeners를 클릭 또는 터치 이벤트에 바인딩합니다. 이것은 현재의 모든 브라우저 버전에서 정상적으로 작동하지만 Chrome Canary (24.0.1275.0 canary)에 대한 최신 업데이트는 물론 DEV 버전에서도이 테스트가 실패합니다.

나는 현재의 modernizr 테스트를 점검했지만 false positive도 반환합니다. 이는 기능이 사용 중지 된 경우에도 Chrome이 터치를 지원함을 의미합니다.

현재로서는 모든 종류의 모바일 브라우저를 테스트하고 긍정적 인 결과를 얻은 경우에만 위 테스트를 통해 터치 확인을 확인합니다. 단점은 크롬의 dev-tools에서 편리한 "에뮬레이트 터치 이벤트"옵션을 사용할 수 없다는 것입니다. 아이디어?

+0

브라우저가 터치를 지원할 때 false를 반환하거나 브라우저가 터치를 지원하지만 터치 하드웨어가 없을 때 true를 반환한다고 말하는 것입니까? –

+0

@SamuelEdwinWard 나는 질문을 명확히했다 –

+0

그냥 바인딩 두 이벤트가 작동하지 않는다고 가정합니다. –

답변

16

짧은 답변 : 테스트는 현재 모든 Chrome 버전에서 다시 작동합니다. 그러나 영원하지는 않을 것입니다.

긴 대답 :

크롬 팀 때문에 터치 할 수있는 화면과 데스크톱의 증가로, 데스크톱 브라우저로 터치 이벤트를 추가하고 싶었다. 그래서 그들은 아마 24.0 Canary의 시간을 지냈습니다. 그런 다음 사람들이 많은 사람들이 "터치 장치 감지"작업을하고 있다는 것을 알게되었습니다. 이 문제는 브라우저 장치가 장치가 아닌 장치 (Modernizr.touch에 해당)이 아닌 경우에만 테스트하는 것입니다. 더 구체적으로는 W3C/Apple TouchEvents API입니다.

그들은 터치/비 터치 용 다른 버전의 Chrome을 출시하고 싶지 않으므로 시작시 터치 장치가 감지 된 경우에만 터치 API를 사용할 수 있도록 설정했습니다 (여기에서 설명 : http://code.google.com/p/chromium/issues/detail?id=152149).

이제 다시 테스트 할 수 있습니다 ... BUT - 미래를 보장하고 싶다면 접근 방식을 바꿀 수도 있습니다. 이유는 다음과 같습니다.

  1. 일부 브라우저는 Chrome에서 수행하는 전환을 수행하지 않습니다.

  2. 터치 기능이 동적 기능으로 변하고 있습니다 : Microsoft Surface 등으로 키보드와 마우스에서 플러그를 뽑아 터치 전용으로 사용할 수 있으며, 시작시 등에서 KVM 스위치를 통해 터치 모니터를 연결할 수 있습니다. 브라우저 공급 업체는 API를 표시하고 사라지게하고 싶지 않습니다. 악몽 일 것입니다. 따라서 어느 시점에 Chrome 담당자는 모든 기기에서 TouchEvents API를 영구 사용하도록 설정합니다. 이 테스트는 "오 탐지"를 다시 던지기 시작할 것입니다.

대신, 마우스, 터치와 스타일러스 입력을위한 공통 이벤트 인터페이스를 제공하는 PointerEvents API, 봐. 당신은 터치 인터페이스 등을위한 버튼이 더 큰 만드는 생각하는 경우, 곧 브라우저에 나타납니다 너무 pointer media query 사양 (그리고 hover 일), 거기에 - none/coarse/fine -이 다른 입력 장치의 정확도를 구별 - 동적 인 경우 연결되어있는 포인터 장치에 따라 스타일을 조정할 수 있습니다.아주 멋지다.

  • A가
  • Modernizr.touch
  • 더 나은에 Modernizr.touchevents 이름이 변경되고 추가되고있는 PointerEvents의 API에 대한 감지 : (다음 몇 주 내에 삭제)

    모더 나이저 버전 3.0은 여기에 관련 변경의 몇 가지를해야합니다 이

그래서 내가하지 않으면 Modernizr.touchevents 스위치에 다시 하락, (이미 IE10에있는) 가능한 경우 PointerEvents 사용을 고려 거라고 의미를 나타냅니다.

+1

네, 크롬 버그 보고서를 알고 있습니다 - 직접 작성했습니다. 지난 달에 실제로 변경 사항을 확인하지 않았으므로이 글을 쓰는 시간을 내셔서 감사합니다. –

+0

표면 태블릿 + IE10 용 HTML5 비디오 플레이어를 수정하려고 몇 시간을 보냈지 만 포인터 이벤트가 작동하지 않습니다. 예상했다. 마우스가 사용되지만 촉감이 예상대로 인식되지 않는 한 모든 것은 괜찮습니다 ... IE10 캔트와 같은 감각은 우아하게 생각할 수 있습니다. ol 'IE6 느낌에 부분적으로 돌아 가기 :/ –

+0

나는 이것이 개선 될 것으로 기대하고있다. 마이크로 소프트는 (어떤 이유로) 80+ 터치 포인트를 처리 할 수있는 협업 디스플레이를 포함하여 터치 기술을 정말로 강조하고있다. 나는 그들이 스크래치가 아니라면 그냥 씻지 않을 것이라는 것을 알고 있다고 확신한다. –

관련 문제