Fix #3838, $(document).height() incorrect in IE6

May still be broken in Netscape Navigator 4.
This commit is contained in:
Mike Sherov 2012-02-25 13:13:16 -05:00 committed by Dave Methvin
parent da02e190b5
commit 5cae50e66e
4 changed files with 51 additions and 1 deletions

View File

@ -42,8 +42,16 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
if ( elem.nodeType === 9 ) {
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
doc = elem.documentElement;
// when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
// so we can't use max, as it'll choose the incorrect offset[Width/Height]
// instead we use the correct client[Width/Height]
// support:IE6
if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
return doc[ clientProp ];
}
return Math.max(
doc[ clientProp ],
elem.body[ scrollProp ], doc[ scrollProp ],
elem.body[ offsetProp ], doc[ offsetProp ]
);

View File

@ -0,0 +1,17 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" id="html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
body {
width: 1000px;
height: 1000px;
}
</style>
</head>
<body>
<div>
<script src="../include_js.php"></script>
</div>
</body>
</html>

View File

@ -0,0 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" id="html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
<script src="../include_js.php"></script>
</div>
</body>
</html>

View File

@ -315,3 +315,17 @@ test("outerHeight()", function() {
div.remove();
jQuery.removeData($div[0], "olddisplay", true);
});
testIframe("dimensions/documentSmall", "window vs. small document", function( jQuery, window, document ) {
expect(2);
equal( jQuery( document ).height(), jQuery( window ).height(), "document height matches window height");
equal( jQuery( document ).width(), jQuery( window ).width(), "document width matches window width");
});
testIframe("dimensions/documentLarge", "window vs. large document", function( jQuery, window, document ) {
expect(2);
ok( jQuery( document ).height() > jQuery( window ).height(), "document height is larger than window height");
ok( jQuery( document ).width() > jQuery( window ).width(), "document width is larger than window width");
});