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.
This commit is contained in:
parent
b60c8560ce
commit
ceba855c01
2 changed files with 45 additions and 10 deletions
|
@ -13,7 +13,9 @@ jQuery.support = (function() {
|
||||||
support,
|
support,
|
||||||
fragment,
|
fragment,
|
||||||
body,
|
body,
|
||||||
bodyStyle,
|
testElementParent,
|
||||||
|
testElement,
|
||||||
|
testElementStyle,
|
||||||
tds,
|
tds,
|
||||||
events,
|
events,
|
||||||
eventName,
|
eventName,
|
||||||
|
@ -136,9 +138,11 @@ jQuery.support = (function() {
|
||||||
// Figure out if the W3C box model works as expected
|
// Figure out if the W3C box model works as expected
|
||||||
div.style.width = div.style.paddingLeft = "1px";
|
div.style.width = div.style.paddingLeft = "1px";
|
||||||
|
|
||||||
// We use our own, invisible, body
|
body = document.getElementsByTagName( "body" )[ 0 ];
|
||||||
body = document.createElement( "body" );
|
// We use our own, invisible, body unless the body is already present
|
||||||
bodyStyle = {
|
// in which case we use a div (#9239)
|
||||||
|
testElement = document.createElement( body ? "div" : "body" );
|
||||||
|
testElementStyle = {
|
||||||
visibility: "hidden",
|
visibility: "hidden",
|
||||||
width: 0,
|
width: 0,
|
||||||
height: 0,
|
height: 0,
|
||||||
|
@ -147,11 +151,19 @@ jQuery.support = (function() {
|
||||||
// Set background to avoid IE crashes when removing (#9028)
|
// Set background to avoid IE crashes when removing (#9028)
|
||||||
background: "none"
|
background: "none"
|
||||||
};
|
};
|
||||||
for ( i in bodyStyle ) {
|
if ( body ) {
|
||||||
body.style[ i ] = bodyStyle[ i ];
|
jQuery.extend( testElementStyle, {
|
||||||
|
position: "absolute",
|
||||||
|
left: -1000,
|
||||||
|
top: -1000
|
||||||
|
});
|
||||||
}
|
}
|
||||||
body.appendChild( div );
|
for ( i in testElementStyle ) {
|
||||||
documentElement.insertBefore( body, documentElement.firstChild );
|
testElement.style[ i ] = testElementStyle[ i ];
|
||||||
|
}
|
||||||
|
testElement.appendChild( div );
|
||||||
|
testElementParent = body || documentElement;
|
||||||
|
testElementParent.insertBefore( testElement, testElementParent.firstChild );
|
||||||
|
|
||||||
// Check if a disconnected checkbox will retain its checked
|
// Check if a disconnected checkbox will retain its checked
|
||||||
// value of true after appended to the DOM (IE6/7)
|
// value of true after appended to the DOM (IE6/7)
|
||||||
|
@ -210,8 +222,8 @@ jQuery.support = (function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the body element we added
|
// Remove the body element we added
|
||||||
body.innerHTML = "";
|
testElement.innerHTML = "";
|
||||||
documentElement.removeChild( body );
|
testElementParent.removeChild( testElement );
|
||||||
|
|
||||||
// Technique from Juriy Zaytsev
|
// Technique from Juriy Zaytsev
|
||||||
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
|
// 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 ) {
|
supportIFrameTest( "proper boxModel in compatMode CSS1Compat (IE6 and IE7)", "boxModelIE", function( compatMode, boxModel ) {
|
||||||
ok( compatMode !== "CSS1Compat" || boxModel, "boxModel properly detected" );
|
ok( compatMode !== "CSS1Compat" || boxModel, "boxModel properly detected" );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
supportIFrameTest( "body background is not lost if set prior to loading jQuery (#9238)", "bodyBackground", function( color, support ) {
|
||||||
|
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" );
|
||||||
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue