Index: _source/plugins/wysiwygarea/plugin.js
===================================================================
--- _source/plugins/wysiwygarea/plugin.js	(revision 4139)
+++ _source/plugins/wysiwygarea/plugin.js	(working copy)
@@ -223,7 +223,7 @@
 					var isCustomDomain = CKEDITOR.env.isCustomDomain();
 
 					// Creates the iframe that holds the editable document.
-					var createIFrame = function()
+					var createIFrame = function( data )
 					{
 						if ( iframe )
 							iframe.remove();
@@ -231,35 +231,36 @@
 							fieldset.remove();
 
 						frameLoaded = 0;
-						// The document domain must be set within the src
-						// attribute;
-						// Defer the script execution until iframe
-						// has been added to main window, this is needed for some
-						// browsers which will begin to load the frame content
-						// prior to it's presentation in DOM.(#3894)
-						var src = 'void( '
-								+ ( CKEDITOR.env.gecko ? 'setTimeout' : '' ) + '( function(){' +
-								'document.open();' +
-								( CKEDITOR.env.ie && isCustomDomain ? 'document.domain="' + document.domain + '";' : '' ) +
-								'document.write( window.parent[ "_cke_htmlToLoad_' + editor.name + '" ] );' +
-								'document.close();' +
-								'window.parent[ "_cke_htmlToLoad_' + editor.name + '" ] = null;' +
-								'}'
-								+ ( CKEDITOR.env.gecko ? ', 0 )' : ')()' )
-								+ ' )';
 
-						// Loading via src attribute does not work in Opera.
-						if ( CKEDITOR.env.opera )
-							src = 'void(0);';
-
 						iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' +
-								' style="width:100%;height:100%"' +
-								' frameBorder="0"' +
-								' tabIndex="-1"' +
-								' allowTransparency="true"' +
-								' src="javascript:' + encodeURIComponent( src ) + '"' +
-								'></iframe>' );
+  							' style="width:100%;height:100%"' +
+  							' frameBorder="0"' +
+							// Support for custom document.domain in IE.
+							( isCustomDomain ?
+								' src="javascript:void((function(){' +
+									'document.open();' +
+									'document.domain=\'' + document.domain + '\';' +
+									'document.close();' +
+								'})())"' : '' ) +
+  							' tabIndex="-1"' +
+  							' allowTransparency="true"' +
+  							'></iframe>' );
 
+						// Register onLoad event for iframe element, which
+						// will fill it with content and set custom domain.
+						iframe.on( 'load', function( e )
+						{
+							e.removeListener();
+							var doc = iframe.getFrameDocument().$;
+
+							// Custom domain handling is needed after each document.open().
+							doc.open();
+							if ( isCustomDomain )
+								doc.domain = document.domain;
+							doc.write( data );
+							doc.close();
+						} );
+
 						var accTitle = editor.lang.editorTitle.replace( '%1', editor.name );
 
 						if ( CKEDITOR.env.gecko )
@@ -314,12 +315,9 @@
 					// enables editing, and makes some
 					var activationScript =
 						'<script id="cke_actscrpt" type="text/javascript">' +
-							'window.onload = function()' +
-							'{' +
 								// Call the temporary function for the editing
 								// boostrap.
 								'window.parent.CKEDITOR._["contentDomReady' + editor.name + '"]( window );' +
-							'}' +
 						'</script>';
 
 					// Editing area bootstrap code.
@@ -522,18 +520,8 @@
 									'</html>' +
 									activationScript;
 
-								window[ '_cke_htmlToLoad_' + editor.name ] = data;
 								CKEDITOR._[ 'contentDomReady' + editor.name ] = contentDomReady;
-								createIFrame();
-
-								// Opera must use the old method for loading contents.
-								if ( CKEDITOR.env.opera )
-								{
-									var doc = iframe.$.contentWindow.document;
-									doc.open();
-									doc.write( data );
-									doc.close();
-								}
+								createIFrame( data );
 							},
 
 							getData : function()
Index: _source/core/_bootstrap.js
===================================================================
--- _source/core/_bootstrap.js	(revision 4139)
+++ _source/core/_bootstrap.js	(working copy)
@@ -12,8 +12,11 @@
 	// Check is High Contrast is active by creating a temporary element with a
 	// background image.
 
-	var testImage = ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 ) ? ( CKEDITOR.basePath + 'images/spacer.gif' ) : 'about:blank';
+	var useSpacer = CKEDITOR.env.ie && CKEDITOR.env.version < 7
+		|| CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900;
 
+	var testImage = useSpacer ? ( CKEDITOR.basePath + 'images/spacer.gif' ) : 'about:blank';
+
 	var hcDetect = CKEDITOR.dom.element.createFromHtml(
 		'<div style="width:0px;height:0px;' +
 			'position:absolute;left:-10000px;' +
Index: CHANGES.html
===================================================================
--- CHANGES.html	(revision 4139)
+++ CHANGES.html	(working copy)
@@ -47,6 +47,7 @@
 		<li><a href="http://dev.fckeditor.net/ticket/3898">#3898</a> : Added validation for URL presentance in Image dialog.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/3528">#3528</a> : Fixed Context Menu issue when triggered using Shift+F10.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4028">#4028</a> : Maximize control's tool tip was wrong once it is maximized.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/3905">#3905</a> : Fixed unauthenticated content warnings over SSL in FF 3.5.</li>
 	</ul>
 	<h3>
 		CKEditor 3.0</h3>
