Ok, de retour.
J'ai résolu mon problème, symptômes similaires, mais en fait la cause était autre (pour info, une ligne que j'avais oubliée de commenter, qui passait le designMode à On inutilement une 2e fois, çà bloquait en partie le script avec firefox 1.5 alors que cette erreur passait avec 1.0.7).
Je vais choisir la solution du setTimeout sans le onload, mais en mettant une valeur de 10ms
Je m'excuse, mais j'aime pas. Comment tu fais pour déterminer une valeur qui passera chez tout le monde ? Ce n'est pas parce sur ta machine 10 ms convient que c'est le cas ailleurs.
Utiliser le onload a plus de sens, puisque visiblement on a besoin d'avoir le DOM chargée avant de pouvoir faire d'autres actions.
(Au passage il me semble que firefox a un événement du genre "onDOMLoad", je ne sais plus comment il s'appelle...)
Une autre solution dans certains cas similaires, est de recourir à une fonction récursive, du genre :
Code : Tout sélectionner
function toto() {
if (!win.document && !win.document.body) {
setTimeout(toto, 1);
return;
}
action1();
...
}
En tout cas, en reprenant ton exemple, je te propose uje solution qui semble bien fonctionner :
Code : Tout sélectionner
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
<!--
function initIframe(){
var textarea = document.getElementsByTagName('textarea')[0];
var iframe = document.createElement('iframe');
iframe.setAttribute('id','iframe');
iframe.setAttribute('width',textarea.offsetWidth);
iframe.setAttribute('height',textarea.offsetHeight);
textarea.parentNode.appendChild(iframe);
textarea.style.display = 'none';
var iframedoc = document.getElementById('iframe').contentWindow.document;
iframedoc.open();
iframedoc.write(textarea.value);
iframedoc.close();
var link = iframedoc.createElement('link');
link.setAttribute('rel','stylesheet');
link.setAttribute('type','text/css');
link.setAttribute('href','http://www.geckozone.org/forum/templates/geckozone/geckozone.css');
iframedoc.getElementsByTagName('head')[0].appendChild(link);
}
window.onload=initIframe;
//-->
</script>
</head>
<body>
<textarea cols="90" rows="10"><html><head></head><body><h3 class="quote">test</h3></body></html></textarea>
</body>
</html>
j'ai changé contentDocument en contentWindow.document pour que IE soit content et compatible.