From: Richard Gibson Date: Sat, 8 Dec 2012 23:04:13 +0000 (-0500) Subject: Fix #12904: Firefox defaultDisplay with body/iframe display:none. Report and solution... X-Git-Tag: 1.9.0b1~44 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d343e6b9ed501052f1676694d5e53649c92e65a0;p=jquery.git Fix #12904: Firefox defaultDisplay with body/iframe display:none. Report and solution by @maranomynet; test by @rwldrn. --- diff --git a/src/css.js b/src/css.js index 334e31a92..c9a1ab433 100644 --- a/src/css.js +++ b/src/css.js @@ -1,4 +1,4 @@ -var curCSS, iframe, iframeDoc, +var curCSS, iframe, ralpha = /alpha\([^)]*\)/i, ropacity = /opacity\s*=\s*([^)]*)/, rposition = /^(top|right|bottom|left)$/, @@ -446,44 +446,38 @@ function getWidthOrHeight( elem, name, extra ) { // Try to determine the default display value of an element function css_defaultDisplay( nodeName ) { - if ( elemdisplay[ nodeName ] ) { - return elemdisplay[ nodeName ]; - } - - var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), - display = elem.css("display"); - elem.remove(); - - // If the simple way fails, - // get element's real default display by attaching it to a temp iframe - if ( display === "none" || display === "" ) { - // Use the already-created iframe if possible - iframe = document.body.appendChild( - iframe || jQuery.extend( document.createElement("iframe"), { - frameBorder: 0, - width: 0, - height: 0 - }) - ); - - // Create a cacheable copy of the iframe document on first call. - // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML - // document to it; WebKit & Firefox won't allow reusing the iframe document. - if ( !iframeDoc || !iframe.createElement ) { - iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; - iframeDoc.write(""); - iframeDoc.close(); + var elem, + doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + elem = jQuery( doc.createElement( nodeName ) ); + display = curCSS( elem.appendTo( doc.body )[0], "display" ); + elem.remove(); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("