Skip to content
Permalink
Browse files

Fixes #9239. If the body is already present in the DOM, use a div wit…

…hin it to perform boxModel-related support tests. Unit test added.
  • Loading branch information...
jaubourg committed May 13, 2011
1 parent b60c856 commit ceba855c010c792aad8fc15edc06b86285f71142
Showing with 45 additions and 10 deletions.
  1. +22 −10 src/support.js
  2. +23 −0 test/unit/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/
@@ -30,3 +30,26 @@ function supportIFrameTest( title, url, noDisplay, func ) {
supportIFrameTest( "proper boxModel in compatMode CSS1Compat (IE6 and IE7)", "boxModelIE", function( compatMode, boxModel ) {
ok( compatMode !== "CSS1Compat" || boxModel, "boxModel properly detected" );
});

supportIFrameTest( "body background is not lost if set prior to loading jQuery (#9238)", "bodyBackground", function( color, support ) {

This comment has been minimized.

Copy link
@mikesherov

mikesherov Nov 1, 2011

Member

I know this is really old now, but it's actually ticket #9239, not #9238

expect( 2 );
var okValue = {
"#000000": true,
"rgb(0, 0, 0)": true
};
ok( okValue[ color ], "color was not reset (" + color + ")" );
var i, passed = true;
for ( i in jQuery.support ) {
if ( jQuery.support[ i ] !== support[ i ] ) {
passed = false;
strictEquals( jQuery.support[ i ], support[ i ], "Support property " + i + " is different" );
}
}
for ( i in support ) {
if ( !( i in jQuery.support ) ) {
ok = false;
strictEquals( src[ i ], dest[ i ], "Unexpected property: " + i );
}
}
ok( passed, "Same support properties" );
});

0 comments on commit ceba855

Please sign in to comment.
You can’t perform that action at this time.