在多个浏览器中一致地获取可用的浏览器窗口大小(clientHeight / clientWidth)

时间:2011-02-12 07:32:53

标签: javascript browser

我想要一种使用jQuery / Mootools /任何第三方库依赖项在不使用的情况下在多个浏览器中获取可用窗口大小的方法。我对此进行了一些研究,但我遇到的一半事情都在谈论Netscape Navigator ......

只是想知道那里有人是否有更多的近期建议。

3 个答案:

答案 0 :(得分:4)

使用

var width = getWindowSize().width;

var getWindowSize = (function() {
  var docEl = document.documentElement,
      IS_BODY_ACTING_ROOT = docEl && docEl.clientHeight === 0;

  // Used to feature test Opera returning wrong values 
  // for documentElement.clientHeight. 
  function isDocumentElementHeightOff () { 
      var d = document,
          div = d.createElement('div');
      div.style.height = "2500px";
      d.body.insertBefore(div, d.body.firstChild);
      var r = d.documentElement.clientHeight > 2400;
      d.body.removeChild(div);
      return r;
  }

  if (typeof document.clientWidth == "number") {
     return function () {
       return { width: document.clientWidth, height: document.clientHeight };
     };
  } else if (IS_BODY_ACTING_ROOT || isDocumentElementHeightOff()) {
      var b = document.body;
      return function () {
        return { width: b.clientWidth, height: b.clientHeight };
      };
  } else {
      return function () {
        return { width: docEl.clientWidth, height: docEl.clientHeight };
      };
  }
})();

注意:在文档加载完成之前,无法准确确定尺寸。

来自 comp.lang.javascript FAQ

答案 1 :(得分:3)

这不是一个完美的解决方案,但它是轻量级的。适合大多数用途:

var WX,WY;
if( window.innerWidth )
{
    WX = window.innerWidth;
    WY = window.innerHeight;
} else {
    WX = document.body.clientWidth;
    WY = document.body.clientHeight;
}

答案 2 :(得分:3)

对于现代浏览器:

Mexico 1
Mexico 2
Russia 1
USA 1
Mexico 1

就是你所需要的一切。