diff options
author | jaubourg <j@ubourg.net> | 2011-05-13 17:43:32 +0200 |
---|---|---|
committer | jaubourg <j@ubourg.net> | 2011-05-13 17:43:53 +0200 |
commit | ceba855c010c792aad8fc15edc06b86285f71142 (patch) | |
tree | c72dbe6543fa3e081c399ea5df8652838dce76f6 /src/support.js | |
parent | b60c8560cedacce6c82504f15e9bb54c2b3af59f (diff) | |
download | jquery-ceba855c010c792aad8fc15edc06b86285f71142.tar.gz jquery-ceba855c010c792aad8fc15edc06b86285f71142.zip |
Fixes #9239. If the body is already present in the DOM, use a div within it to perform boxModel-related support tests. Unit test added.
Diffstat (limited to 'src/support.js')
-rw-r--r-- | src/support.js | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/support.js b/src/support.js index 9ffad2803..4420b7fca 100644 --- a/src/support.js +++ b/src/support.js @@ -13,7 +13,9 @@ jQuery.support = (function() { support, fragment, body, - bodyStyle, + testElementParent, + testElement, + testElementStyle, tds, events, eventName, @@ -136,9 +138,11 @@ jQuery.support = (function() { // Figure out if the W3C box model works as expected div.style.width = div.style.paddingLeft = "1px"; - // We use our own, invisible, body - body = document.createElement( "body" ); - bodyStyle = { + body = document.getElementsByTagName( "body" )[ 0 ]; + // We use our own, invisible, body unless the body is already present + // in which case we use a div (#9239) + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { visibility: "hidden", width: 0, height: 0, @@ -147,11 +151,19 @@ jQuery.support = (function() { // Set background to avoid IE crashes when removing (#9028) background: "none" }; - for ( i in bodyStyle ) { - body.style[ i ] = bodyStyle[ i ]; + if ( body ) { + jQuery.extend( testElementStyle, { + position: "absolute", + left: -1000, + top: -1000 + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; } - body.appendChild( div ); - documentElement.insertBefore( body, documentElement.firstChild ); + testElement.appendChild( div ); + testElementParent = body || documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) @@ -210,8 +222,8 @@ jQuery.support = (function() { } // Remove the body element we added - body.innerHTML = ""; - documentElement.removeChild( body ); + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); // Technique from Juriy Zaytsev // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ |