2009-11-19 4 views
52

Ich versuche, die genaue Höhe und Breite eines Browsers Ansichtsfenster zu finden, aber ich vermute, dass entweder Mozilla oder IE gibt mir die falsche Nummer. Hier ist meine Methode für Höhe:Finden Sie die genaue Höhe und Breite des Ansichtsfensters in einem Browser-Browser (kein Prototype/jQuery)

var viewportHeight = window.innerHeight || 
        document.documentElement.clientHeight || 
        document.body.clientHeight; 

Ich habe noch nicht auf Breite begonnen, aber ich vermute, es ist etwas ähnlich sein wird.

Gibt es einen korrekteren Weg, diese Informationen zu erhalten? Im Idealfall möchte ich, dass die Lösung auch mit Safari/Chrome/anderen Browsern funktioniert.

+0

möglich Duplikat [Get den Browser Ansichtsfenster Dimensionen mit JavaScript] (http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript) – Stephan

+0

Sie können auch das [W] (https://github.com/pyrsmk/W) Bibliothek, die Cross-Browser-Viewport-Erkennung behandelt;) – pyrsmk

Antwort

79

Sie könnten versuchen, diese:

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/)

Allerdings ist es nicht einmal möglich ist, die Darstellungsinformationen zu erhalten in alle Browser (zB IE6 im Quirks-Modus). Aber das obige Skript sollte einen guten Job machen :-)

+4

Seit 5 Stunden mit einem Fehler festgefahren, stellt sich heraus, dass jquery nicht denselben Wert in FF/Chrome zurückgibt, wenn '$ (document) .width()' oder '$ (window) .width()' ausgeführt wird. 'window.innerWidth' funktioniert super. – qwerty

+0

für mobile Gerät seine falsche Breite und Höhe zeigt –

+0

Dies scheint nicht in Iframes funktionieren, stattdessen gibt es die Iframe-Größe zurück. Irgendwelche Hinweise darauf? –

12

Ich habe immer nur document.documentElement.clientHeight/clientWidth verwendet. Ich glaube nicht, dass Sie in diesem Fall die OR-Bedingungen benötigen.

+0

Es konnte nicht schaden. Der Rest wird nicht ausgewertet, sobald ein gültiger Wert gefunden wird –

+2

Sie haben einen Tippfehler, sollte sein: 'document.documentElement'. dies funktioniert nicht in quircksmode ... auf FF gibt es die gesamte Höhe des Dokuments, anstatt nur die "clientHeight", und auf IE gibt es "0". – vsync

+0

seltsam, funktioniert in IE6,7,8 für mich. – Ben

16

U verwenden können kürzere Version:

<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

die Sie interessieren ..

<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

Danke! Du hast gerade mein Leben gerettet! :) – gioNicol