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,6 +501,13 @@
 					}
 				} );
 
+				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() {
@@ -518,7 +525,8 @@
 						style: {
 							width: '100%',
 							display: 'block'
-						}
+						},
+						height: self.iframeHeight
 					} );
 
 					dom.add( contentNode, 'div', { 'class': 'wpview-overlay' } );
@@ -561,37 +569,39 @@
 					iframeDoc.close();
 
 					function resize() {
-						var $iframe, iframeDocHeight;
+						var $iframe;
 
 						// 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();
 							}
 						}
 					}
 
-					$( iframe.contentWindow ).on( 'load', resize );
+					if ( ! self.iframeHeight ) {
+						$( iframe.contentWindow ).on( 'load', resize );
 
-					if ( MutationObserver ) {
-						observer = new MutationObserver( _.debounce( resize, 100 ) );
+						if ( MutationObserver ) {
+							observer = new MutationObserver( _.debounce( resize, 100 ) );
 
-						observer.observe( iframeDoc.body, {
-							attributes: true,
-							childList: true,
-							subtree: true
-						} );
-
-						$( node ).one( 'wp-mce-view-unbind', function() {
-							observer.disconnect();
-						} );
-					} else {
-						for ( i = 1; i < 6; i++ ) {
-							setTimeout( resize, i * 700 );
+							observer.observe( iframeDoc.body, {
+								attributes: true,
+								childList: true,
+								subtree: true
+							} );
+
+							$( node ).one( 'wp-mce-view-unbind', function() {
+								observer.disconnect();
+							} );
+						} else {
+							for ( i = 1; i < 6; i++ ) {
+								setTimeout( resize, i * 700 );
+							}
 						}
 					}
 
