views:

691

answers:

4

I'm trying to find the exact height and width of a browser's viewport, but I suspect that either Mozilla or IE is giving me the wrong number. Here's my method for height:

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

I haven't started on width yet but I'm guessing it's going to be something similar.

Is there a more correct way of getting this information? Ideally, I'd like the solution to work with Safari/Chrome/other browsers as well.

A: 

I've always just used document.docuementElement.clientHeight/clientWidth. I don't think you need the OR conditions in this case.

Ben
It couldn't hurt. They remainder will not be evaluated once a valid value is found
Justin Johnson
you have a typo there, should be : 'document.documentElement'.this does not work in quircksmode... on FF it gives the whole document height, instead of just the 'clientHeight', and on IE it gives '0'.
vsync
strange, works in IE6,7,8 for me.
Ben
A: 

Use this tipp: http://www.appelsiini.net/projects/viewport or that code: http://updatepanel.wordpress.com/2009/02/20/getting-the-page-and-viewport-dimensions-using-jquery/

powtac
I'm trying to do this without using jQuery. I guess I should have been clearer on that.
lyoshenka
+3  A: 

You might try this:

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

However, it is not even possible to get the viewport information in all browsers (e.g. IE6 in quirks mode). But the above script should do a good job :-)

Mef
vsync
You are right, this is a mistake, will correct it...
Mef
A: 

This post has the script, which has the logic to work with all browsers. http://praveenbattula.blogspot.com/2009/06/knowing-browser-width-and-height-for.html

Rare Solutions