La manipulation du DOM avec Javascript est la technique de base utilisée pour enrichir des pages HTML (c'est d'ailleurs ce qu'utilisent les gadgets publo.fr). Cependant, tous les navigateurs ne respectent pas les standard du Web, et bien sûr, certains ajoutent des bugs à ces incompatibilités.

Internet Explorer présente un bug assez original dans ce domaine. Le problème survient lorsqu'on utilise du Javascript pour ajouter un iframe au document et que l'on tente de modifier ses attributs a posteriori.

Premier exemple : les changement d'attributs sans effet

On ajoute un iframe au noeud "noeudIFrame" puis on tente de masquer sa bordure et ses scrollbars (par défaut, IE affiche une bordure et des scrollbars aux iframes, ce qui n'est pas toujours du meilleur effet).

var iframe = noeudIFrame.appendChild(
                     document.createElement('iframe'));
iframe.setAttribute('frameBorder', '0'); 
iframe.setAttribute('scrolling', 'no');

Malheureusement, les deux dernières lignes de code n'ont aucun effet (la bordure et le scrolling resteront visibles) sous IE... Il est trop tard lorsque l'iframe a été ajouté dans le DOM pour modifier ces deux attributs. Par contre, le code suivant fonctionne :

var iframe = document.createElement('iframe');
iframe.setAttribute('frameBorder', '0'); 
iframe.setAttribute('scrolling', 'no');
noeudIFrame.appendChild(iframe);

Notez au passage que la casse utilisée pour l'attribut frameBorder n'est pas une coquille de ma part : alors que le nom standard est frameborder, IE ne le comprend pas mais comprend frameBorder.

Second exemple (plus vicieux) : l'iframe qui plante le navigateur

On ajoute un iframe au document puis on définit sa source (attribut src) :

var iframe = noeudIFrame.appendChild(
                      document.createElement('iframe'));
iframe.setAttribute('src','http://blog.publo.fr');

Ici le résultat est encore plus catastrophique : il peut aboutir à un crash du navigateur sous Windows XP, avec IE6 et IE7 (le bug semble corrigé sous Vista). Là encore, la prudence recommande de définir la source avant d'ajouter l'élément :

var iframe = document.createElement('iframe');
iframe.setAttribute('src', 'http://blog.publo.fr'); 
noeudIFrame.appendChild(iframe);

En conclusion, si l'on veut éviter des problèmes avec certains navigateurs puis des bugs difficiles à identifier, il vaut mieux ménager le DOM ! En particulier pour les iframe : on commence par les créer, on les définit complètement puis on les insère dans le document.