Index: src/wp-includes/js/mce-view.js
===================================================================
--- src/wp-includes/js/mce-view.js	(revision 32710)
+++ src/wp-includes/js/mce-view.js	(working copy)
@@ -501,10 +501,17 @@
 					}
 				} );
 
+				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 @@
 						style: {
 							width: '100%',
 							display: 'block'
-						}
+						},
+						height: self.iframeHeight
 					} );
 
 					dom.add( contentNode, 'div', { 'class': 'wpview-overlay' } );
@@ -561,20 +569,33 @@
 					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();
+						}, 2000 );
+					}
+
 					$( iframe.contentWindow ).on( 'load', resize );
 
 					if ( MutationObserver ) {
