IE中的window.clientWidth始终为0

时间:2012-10-02 03:04:09

标签: javascript internet-explorer

我需要IE中文档包含窗口的实际像素clientWidth,以便计算正确的缩放值,但发现窗口始终返回值0.有没有办法从任何DOM对象获取此值?我是一个JS菜鸟,并且发现只要缩放是100%,document.body.clientWidth就可以完成这个技巧,但是否则会返回缩放的像素值。帮助

1 个答案:

答案 0 :(得分:2)

在早于版本8的Internet Explorer中,它以物理像素大小检索宽度,而从版本8开始,它以逻辑像素大小返回宽度。

这是什么意思?

如果浏览器未处于正常缩放级别(用户可以放大或缩小网页:CTRL和+,CTRL和 - ),则clientWidth属性与版本8的工作方式与早期版本不同。

  • 即使文档中的当前像素大小不同,宽度也是在版本8之前的Internet Explorer中以默认像素大小计算的。
  • 从Internet Explorer 8以及Firefox,Opera,Google Chrome和Safari中,宽度以当前像素大小计算。

例如,如果缩放级别为200%,则clientWidth属性在版本8之前检索的值是对于相同客户端窗口大小从版本8检索的值的两倍。

对于获取浏览器窗口大小的跨浏览器解决方案:

<head>
    <script type="text/javascript">
        // always return 1, except at non-default zoom levels in IE before version 8
        function GetZoomFactor() {
            var factor = 1;
            if (document.body.getBoundingClientRect) {
                // rect is only in physical pixel size in IE before version 8 
                var rect = document.body.getBoundingClientRect();
                var physicalW = rect.right - rect.left;
                var logicalW = document.body.offsetWidth;
                // the zoom level is always an integer percent value
                factor = Math.round((physicalW / logicalW) * 100) / 100;
            }
            return factor;
        }

        function GetWindowSize() {
            var zoomFactor = GetZoomFactor();
            var w = Math.round(document.documentElement.clientWidth / zoomFactor);
            var h = Math.round(document.documentElement.clientHeight / zoomFactor);
            var info = document.getElementById("info");
            info.innerHTML = w + "px * " + h + "px";
        }
    </script>
</head>
<body onload="GetWindowSize ()">Size of the browser's client area:
<span id="info" style="margin-left:20px;"></span>

    <div
    style="width:500px; height:1000px; background-color:#e0a0a0;">Size of this element: 500px * 1000px</div>
</body>