diff options
author | Mike Sherov <mike.sherov@gmail.com> | 2012-02-25 13:13:16 -0500 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2012-03-02 11:45:30 -0500 |
commit | 5cae50e66e34c277412c01ccb1c24bd6a85d2d8a (patch) | |
tree | 471a098956d7ac8af0e1bcf74221b344d722e57d | |
parent | da02e190b5fa57d56a6561ac64209c36c64c4ecd (diff) | |
download | jquery-5cae50e66e34c277412c01ccb1c24bd6a85d2d8a.tar.gz jquery-5cae50e66e34c277412c01ccb1c24bd6a85d2d8a.zip |
Fix #3838, $(document).height() incorrect in IE6
May still be broken in Netscape Navigator 4.
-rw-r--r-- | src/dimensions.js | 10 | ||||
-rw-r--r-- | test/data/dimensions/documentLarge.html | 17 | ||||
-rw-r--r-- | test/data/dimensions/documentSmall.html | 11 | ||||
-rw-r--r-- | test/unit/dimensions.js | 14 |
4 files changed, 51 insertions, 1 deletions
diff --git a/src/dimensions.js b/src/dimensions.js index 8069676eb..64da9f4f2 100644 --- a/src/dimensions.js +++ b/src/dimensions.js @@ -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 ] ); diff --git a/test/data/dimensions/documentLarge.html b/test/data/dimensions/documentLarge.html new file mode 100644 index 000000000..8b434e719 --- /dev/null +++ b/test/data/dimensions/documentLarge.html @@ -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>
\ No newline at end of file diff --git a/test/data/dimensions/documentSmall.html b/test/data/dimensions/documentSmall.html new file mode 100644 index 000000000..e0e9a3d54 --- /dev/null +++ b/test/data/dimensions/documentSmall.html @@ -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>
\ No newline at end of file diff --git a/test/unit/dimensions.js b/test/unit/dimensions.js index 222459f51..c6b8e835c 100644 --- a/test/unit/dimensions.js +++ b/test/unit/dimensions.js @@ -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"); +}); |