讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議134:避免計算窗口大小 >

建議134:避免計算窗口大小

對於瀏覽器窗口來說,通過獲取<html>標籤的clientWidth和clientHeight屬性就可以得到瀏覽器窗口的可視寬度和高度,由於<html>標籤在腳本中表示為document.documentElement,因此可以這樣設計:


var w=document.documentElement.clientWidth;

var h=document.documentElement.clientHeight;


不過在IE 6.0以下版本的瀏覽器中(即在IE瀏覽器的「怪異」解析模式下),body是最頂層的可視元素,而html元素保持隱藏,因此只有通過<body>標籤的clientWidth和clientHeight屬性才可以得到瀏覽器窗口的可視寬度和高度,而<body>標籤在腳本中表示為document.body,要兼容IE「怪異」解析模式可以這樣設計:


var w=document.body.clientWidth;

var h=document.body.clientHeight;


然而,支持DOM解析模式的瀏覽器都把body視為一個普通的塊級元素,而<html>標籤包含整個瀏覽器窗口。因此,考慮瀏覽器的兼容性,可以這樣設計,如果瀏覽器支持DOM標準,那麼使用documentElement對像讀取body元素,若該對像不存在,則使用body對像讀取body元素:


var w=document.documentElement.clientWidth||document.body.clientWidth;

var h=document.documentElement.clientHeight||document.body.clientHeight;


如果窗口包含內容超出了窗口可視區域,那麼應該使用scrollWidth和scrollHeight屬性來獲取窗口的實際寬度和高度。不過對於document.documentElement和document.body來說,不同瀏覽器對於它們的支持略有差異。例如:


<body >

<p >

</p>

</body>

<script language="javascript"type="text/javascript">

var wb=document.body.scrollWidth;

var hb=document.body.scrollHeight;

var wh=document.documentElement.scrollWidth;

var hh=document.documentElement.scrollHeight;

</script>


不同瀏覽器的scrollHeight和scrollWidth返回值比較見表6.6。

通過上面的返回值比較可以看出,不同瀏覽器使用documentElement對像獲取瀏覽器窗口的實際尺寸是一致的,但使用Body對像獲取對應尺寸就會存在很大差異,特別是Firefox瀏覽器,它把scrollWidth與clientWidth屬性值視為相等,顯然這是錯誤的。