2009-11-19 3 views
52

브라우저의 뷰포트 높이와 너비를 정확히 찾으려고하지만 Mozilla 또는 IE에서 제공하는 것으로 의심됩니다 나 잘못된 번호.크로스 브라우저 방식으로 뷰포트의 정확한 높이와 너비 찾기 (프로토 타입/jQuery 없음)

나는 아직 폭을 시작하지 않았지만 비슷한 것으로 될 것이라고 추측하고 있습니다.

이 정보를 얻는 더 정확한 방법이 있습니까? 이상적으로는 Safari/Chrome/다른 브라우저에서도 사용할 수있는 솔루션을 원합니다.

+0

가능한 중복 자바 스크립트와 함께] (0120)를 참조하십시오. – Stephan

+0

또한 [W] (https://github.com/pyrsmk)를 사용할 수 있습니다./W) 라이브러리, 브라우저 간 뷰포트 검색을 처리합니다.) – pyrsmk

답변

79

이 작업을 시도 할 수 있습니다 :

function getViewport() { 

var viewPortWidth; 
var viewPortHeight; 

// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight 
if (typeof window.innerWidth != 'undefined') { 
    viewPortWidth = window.innerWidth, 
    viewPortHeight = window.innerHeight 
} 

// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document) 
else if (typeof document.documentElement != 'undefined' 
&& typeof document.documentElement.clientWidth != 
'undefined' && document.documentElement.clientWidth != 0) { 
    viewPortWidth = document.documentElement.clientWidth, 
    viewPortHeight = document.documentElement.clientHeight 
} 

// older versions of IE 
else { 
    viewPortWidth = document.getElementsByTagName('body')[0].clientWidth, 
    viewPortHeight = document.getElementsByTagName('body')[0].clientHeight 
} 
return [viewPortWidth, viewPortHeight]; 
} 

(http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/) 그러나

, 뷰포트 정보를 얻을조차 수 없습니다 모든 브라우저 (예 : quirks 모드의 IE6). 그러나 위의 스크립트는 :-) 좋은 일을해야

+4

5 시간 동안 버그가 생겨서 jquery가'$ (document) .width()'또는'$ (window) .width()'를 할 때 FF/Chrome에서 같은 값을 반환하지 않습니다. 'window.innerWidth'는 훌륭하게 작동합니다. 휴대 기기 용 – qwerty

+0

너비와 높이가 잘못 표시됨 –

+0

iframe 내부에서 작동하지 않는 것 같습니다. 대신 iframe 크기를 반환합니다. 그것에 관한 어떤 단서? –

12

난 항상 document.documentElement.clientHeight/clientWidth을 사용했습니다. 이 경우 OR 조건이 필요하다고 생각하지 않습니다.

+0

아프지 않았습니다. 유효한 값이 발견되면 나머지는 평가되지 않습니다. –

+2

거기에 오타가 있으면 'document.documentElement'여야합니다. 이것은 quircksmode에서 작동하지 않습니다 ... FF에서는 전체 문서 높이가 'clientHeight'가 아니라 IE가 '0'이됩니다. – vsync

+0

이상한, 나를 위해 IE6,7,8에서 작동합니다. – Ben

16

U 짧은 버전 사용할 수 있습니다 :이 시도

<script type="text/javascript"> 
<!-- 
function viewport(){ 
    var e = window; 
    var a = 'inner'; 
    if (!('innerWidth' in window)){ 
     a = 'client'; 
     e = document.documentElement || document.body; 
    } 
    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] } 
} 
//--> 
</script> 
4

을 .. [가져 오기 브라우저 뷰포트 크기의

<script type="text/javascript"> 
function ViewPort() 
{ 
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0) 
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) 
var viewsize = w + "," + h; 
alert("Your View Port Size is:" + viewsize); 
} 
</script> 
+0

고마워! 방금 내 목숨을 구했어! :) – gioNicol