2013-05-14 2 views
19

현재 웹 사이트에서 모바일 장치 감지 용 JavaScript를 사용하고 있습니다. 그러면 모바일 또는 데스크톱 사용자를 위해 다른 콘텐츠를 제공 할 수 있습니다.픽셀 비율/밀도를 감지하는 모범 사례는 무엇입니까?

var isMobileScreenWidth = ((screen.width/window.devicePixelRatio) < 768) 

768px 우리가 모바일 또는 데스크톱 그래서 767과 같습니다 정의되는 지점입니다 : 모바일 장치 또는 아니라면, 그래서 같은 사용자가 경우

현재는 내가 해결해야 window.devicePixelRatioscreen.width를 사용 모바일 및 768 이상은 데스크톱입니다. 그래서,

이 완벽하게 작동하지만, 최근 파이어 폭스와는 window.devicePixelRatio 변경에서 확대 된 파이어 폭스,에 문제가 가로 질러 온 :

zoom = 30%, window.devicePixelRatio = 0.3 
zoom = 100%, window.devicePixelRatio = 1.0 
zoom = 300%, window.devicePixelRatio = 3.0 

이 지금 나에게 문제를 일으키는 모든 사용자있는 때문에 그들의 브라우저가 파이어 폭스에서 확대되어 사이트의 모바일 버전을 얻게하십시오.

다른 사람들이 데스크탑 브라우저와 별개의 픽셀 밀도를 얻는 다른 방법을 알고 있는지 궁금합니다.

사용자 에이전트 감지 기능을 약간 사용하지만 끊임없이 변화하는 모바일 사용자 에이전트 목록을 따라 잡는 것은 대단한 일이기 때문에 화면 해상도와 사용자 모두에 의존 할 수 없습니다. 동시에 에이전트.

누구든지 이에 대한 아이디어가 있다면 도움이 될 것입니다.

UPDATE :

난 그냥이 건너왔다 : 수학이 빠른 비트가이 게시물에 제안

window.screen.availWidth/document.documentElement.clientWidth 

는 :

window.devicePixelRatio does not work in IE 10 Mobile?

나는 그것을 테스트 한 Firefox에서 작동하고 문제를 해결하지만 불행히도 Chrome에서 문제가 발생하므로

Chrome zoom = 100%, 
window.devicePixelRatio = 1.0, 
window.screen.availWidth/document.documentElement.clientWidth = 3.0 

모든 것을 위해 작동하는 견고한 솔루션을 찾을 수없는 것 같습니다.

+0

당신은 모바일을 확인하기 위해 장치 픽셀 비율을 사용해서는 안됩니다 : 일부 비 모바일 장치는 "망막"(iPad, 맥북 프로 ...) 모바일 스타일을 표시합니다. HD 이미지에만 사용하십시오. –

+0

@ Yukulélé 귀하의 우려를 참조하십시오. 이것이 내가'screen.width'를'window.devicePixelRatio'로 나누었고, 그 결과가'768px' (iPad의 너비)보다 작은지를 확인하는 이유입니다. 그렇게하면 대부분의 태블릿 기기가 모바일 스타일을 보지 못하게됩니다. Kindle Fire와 같은 일부 태블릿 기기는 소형 태블릿이기 때문에 모바일 스타일을 보여 주었지만, 모바일 스타일이 이러한 장치에서 상당히 잘 표현 되었기 때문에 나는 이것을 고려하지 않았습니다. – lukehillonline

답변

14

<meta name="viewport" content="width=device-width"/> 또는 @-ms-viewport {width:device-width} 기능을 통해 제조업체의 힌트를 활용해야합니다. 기본적으로 화면의 픽셀 밀도가 주어지면 장치 제조업체가 최적이라고 생각하는 기본 확대/축소를 노출합니다. 그런 다음 window.innerWidth으로 전화하면 원래 방정식이 의도 한 바를 얻을 수 있지만 픽셀 밀도를 측정하지 않아도됩니다.

무엇이든 window.devicePixelRatio에 의존하지 마십시오. 그것의 의미와 그것이 반환하는 가치는 현재 유동적 인 상태에 있으며, 당신이 지금 바로 그 주위를 기반으로하는 어떤 것도 곧 깨질 것입니다.

참고 : 메타 뷰포트는 IE10 메트로에 Android, iOS 및 Windows Phone 8 -ms-뷰포트 만 (제대로) 작동 @에서 작동하며 윈도우 폰에 적절한 메타 뷰포트 동작을 방해 할 수 있습니다 8. ​​

+1

이 문제에 대한 해결책을 찾지 못해서 고맙습니다. 그러므로'window.devicePixelRatio'를 사용하는 것이 안전한 옵션이라고 생각하지 않는다면 대신 무엇을 사용 하시겠습니까? 불행히도 서버 측 솔루션을 사용할 수 없기 때문에 모바일 장치 감지에 대한 여러 가지 옵션을 살펴 보았습니다. 따라서 JavaScript가 유일한 옵션입니다. – lukehillonline

+1

하나의 아이디어는, CSS에 표시 수직 스크롤바를 강제로'window.innerWidth''에 document.documentElement.clientWidth'를 비교하는 것입니다. 모바일 환경 (핀치 줌 없음)은 동일해야하지만 윈도우 화 된 데스크톱 환경에서는 동일하지 않아야합니다. –

+0

이것은 개발자가 HTML 응용 프로그램의 차원을 완전히 제어 할 수 없으며 (그러한 메커니즘이없는 것처럼 보이기 때문에)이 점을 분명히했습니다. 귀하의 잘못이 아니라 웹 기술의 한계입니다. 네이티브 개발과 달리 현실 세계에서 실제로 1 점이 무엇인지를 일관되게 계산할 방법이 없습니다. – trusktr