diff --git a/static/webdev-editor.js b/static/webdev-editor.js
index 4668155749528547aaed8a5d8bab04f7c7a154af..ed1fdbae0b05e2cd20249cea4753212440325ec8 100644
--- a/static/webdev-editor.js
+++ b/static/webdev-editor.js
@@ -102,15 +102,20 @@ ACOSWebdev.prototype.editorExecute = function (cb) {
     + '  display.err(error.message);\n'
     + '  throw error;\n'
     + '}\n'
+    + 'window.postMessage({state: "done"}, "*");\n'
     + 'window.parent.postMessage({state: "done"}, "*");\n'
     + '</script>\n'
     + (this.config.postExecuteHtml || '')
     + (this.config.postExecuteScript ? ('<script src="' + this.config.postExecuteScript + '"></script>\n') : '')
     + '</body>\n</html>\n';
-  window.addEventListener('message', function (event) {
+  function onDone(event) {
     if (event.data.state == 'done') {
+      window.removeEventListener('message', onDone);
+      var h = $iframe.get(0).contentWindow.document.body.scrollHeight;
+      $iframe.css('height', h + 10 + 'px');
       cb();
     }
-  });
+  }
+  window.addEventListener('message', onDone);
   $iframe.attr('src', 'javascript:window["contents"]');
 };