diff --git a/src/wp-includes/js/mce-view.js b/src/wp-includes/js/mce-view.js index 86638fcff6..cf2b247ac4 100644 --- a/src/wp-includes/js/mce-view.js +++ b/src/wp-includes/js/mce-view.js @@ -501,10 +501,17 @@ window.wp = window.wp || {}; } } ); + if ( self.iframeHeight ) { + dom.add( contentNode, 'div', { style: { + width: '100%', + height: self.iframeHeight + } } ); + } + // Seems the browsers need a bit of time to insert/set the view nodes, // or the iframe will fail especially when switching Text => Visual. setTimeout( function() { - var iframe, iframeDoc, observer, i; + var iframe, iframeDoc, observer, i, block; contentNode.innerHTML = ''; @@ -518,7 +525,8 @@ window.wp = window.wp || {}; style: { width: '100%', display: 'block' - } + }, + height: self.iframeHeight } ); dom.add( contentNode, 'div', { 'class': 'wpview-overlay' } ); @@ -561,20 +569,33 @@ window.wp = window.wp || {}; iframeDoc.close(); function resize() { - var $iframe, iframeDocHeight; + var $iframe; + + if ( block ) { + return; + } // Make sure the iframe still exists. if ( iframe.contentWindow ) { $iframe = $( iframe ); - iframeDocHeight = $( iframeDoc.body ).height(); + self.iframeHeight = $( iframeDoc.body ).height(); - if ( $iframe.height() !== iframeDocHeight ) { - $iframe.height( iframeDocHeight ); + if ( $iframe.height() !== self.iframeHeight ) { + $iframe.height( self.iframeHeight ); editor.nodeChanged(); } } } + if ( self.iframeHeight ) { + block = true; + + setTimeout( function() { + block = false; + resize(); + }, 3000 ); + } + $( iframe.contentWindow ).on( 'load', resize ); if ( MutationObserver ) {