code: function( data )
  					{
  						if ( iframe )
  							iframe.remove();
  
  						var src =
  							'document.open();' +
  
  							// The document domain must be set any time we
  							// call document.open().
  							( isCustomDomain ? ( 'document.domain="' + document.domain + '";' ) : '' ) +
  
  							'document.close();';
  
  						// With IE, the custom domain has to be taken care at first,
  						// for other browers, the 'src' attribute should be left empty to
  						// trigger iframe's 'load' event.
    						src =
  							CKEDITOR.env.air ?
  								'javascript:void(0)' :
  							CKEDITOR.env.ie ?
  								'javascript:void(function(){' + encodeURIComponent( src ) + '}())'
  							:
  								'';
  
  						iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' +
    							' style="width:100%;height:100%"' +
    							' frameBorder="0"' +
    							' title="' + frameLabel + '"' +
    							' src="' + src + '"' +
  							' tabIndex="' + ( CKEDITOR.env.webkit? -1 : editor.tabIndex ) + '"' +
    							' allowTransparency="true"' +
    							'></iframe>' );
  
  						// Running inside of Firefox chrome the load event doesn't bubble like in a normal page (#5689)
  						if ( document.location.protocol == 'chrome:' )
  							CKEDITOR.event.useCapture = true;
  
  						// With FF, it's better to load the data on iframe.load. (#3894,#4058)
  						iframe.on( 'load', function( ev )
  							{
  								frameLoaded = 1;
  								ev.removeListener();
  
  								var doc = iframe.getFrameDocument();
  								doc.write( data );
  
  								CKEDITOR.env.air && contentDomReady( doc.getWindow().$ );
  							});
  
  						// Reset adjustment back to default (#5689)
  						if ( document.location.protocol == 'chrome:' )
  							CKEDITOR.event.useCapture = false;
  
  						mainElement.append( iframe );
  					}
docs: Creates the iframe that holds the editable document.