8791 sujets

Développement web côté serveur, CMS

Salut,

Pour un de mes sites, "j'essaie" de rendre compatible mon petit éditeur WYSIWYG avec Internet Explorer 6/7. Ce dernier fonctionne parfaitement sous Firefox.

Ma page principale contient une Iframe éditable "sMessage" et un textarea masqué "sCode". Lorsque l'utilisateur appuie sur le bouton "Envoyer", la fonction Javascript suivante est appelée:


function GetEditorContent(sNavigator){

	var sEditorContent = "";


	if(sNavigator == "IE"){
		sEditorContent = window.frames["sMessage"].document.body.innerHTML;
		window.document.getElementById("sCode").value = sEditorContent;
	}
	else {	
		sEditorContent = document.getElementById("sMessage").contentDocument.body.innerHTML;
		document.getElementById("sCode").value = sEditorContent;
	}
	
	
	return;

}



Elle récupère donc le code HTML de l'iframe et le copie dans la textarea. Cela me permet de récupérer ce code dans la seconde page qui "traitera" les informations envoyées.

Mais si ces informations sont incorrectes, je souhaite réafficher l'éditeur avec le texte "incorrect" entré par l'utilisateur. Je "recharge" donc ma page de départ en insérant dans la textarea le texte précédemment envoyé.

Je mets dans le "body onload", les fonctions Init et UpdateContent qui suivent:


function Init(sNavigator){

	var oField;

	if(sNavigator == "IE"){
		oField = window.frames[pThis.sFieldName].document;
	}
	else {
		oField = document.getElementById(pThis.sFieldName).contentDocument;
	}

	oField.designMode = "On";
	return;

}




function UpdateContent(sNavigator){

	var sGrossCode = "";
	var sFormatCode = "";
	
	if(sNavigator == "IE"){
		sGrossCode = window.document.getElementById("sCode").innerHTML;
	}
	else {
		sGrossCode = document.getElementById("sCode").innerHTML;
	}

		
	sCode = '<html><head><link rel="stylesheet" href="http://localhost/xyz/css/screen.css" media="screen" /></head><body>';
	sCode += sGrossCode;
	sCode += '</body></html>';
	sFormatCode = pThis.HtmlEntityDecode(sCode);

		
	if(sNavigator == "IE"){
		window.frames["sMessage"].document.body.innerHTML = sFormatCode;
	}
	else {	
		document.getElementById("sMessage").ContentWindow.body.innerHTML = sFormatCode;
	}
	
	return;

}



La fonction "Init" met la iframe en mode "éditable" et la seconde copie le code contenu de la textarea dans la iframe.

Malheureusement sous Internet Explorer, j'ai chaque fois l'erreur suivante:
"window.frames[...].document.body is null or not an object"

Après avoir fait un petit "débugage" à l'aide de plusieurs "alert", j'ai pu en conclure que cette erreur se trouvait dans la deuxième partie de la fonction "UpdateContent" à cette ligne:
"window.frames["sMessage"].document.body.innerHTML = sFormatCode;"

Maintenant je me demande quelle est la véritable erreur donc pourquoi cette instruction est invalide. L'évènement "onload" de la balise body ne se déclenche-t-il pas lorque le document a été complètement chargé?

Si oui, pourquoi me dit-il que cet objet n'existe pas?

Merci d'avance Smiley cligne