11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour, et merci pour votre attention.

Le soucis que je rencontre est très largement documenté sur internet :
Si j'ai un script qui tente une modification dans le DOM alors que le DOM n'a pas encore été correctement chargé, IE 6 & 7 dit "Operation aborted".
C'est expliqué là : http://support.microsoft.com/kb/927917/en

Parmis les solutions j'ai déjà :

- Soit faire attention à inserer mon script bien après la fermeture de l'element DOM qui va être modifié, voir même en faire un enfant direct de <body></body>.

- J'ai aussi l'attribut "defer="defer"" que je peux ajouter à la balise <script ...></script> et qui, sous IE, m'assure que le script sera executé après le chargement du DOM.

- Et j'ai enfin cette solution addDOMLoadEvent par Jesse Skinner : quelques lignes de script qui me permettront ensuite d'executer ma function qu'une fois le DOM chargé :
addDOMLoadEvent(function() { ... });


Je bosse sur un widget actuellement, et j'aimerai savoir s'il existe d'autres solution connue ?
Par exemple le widget Profil de twitter (http://twitter.com/about/resources/widgets/widget_profile), semble n'utiliser aucune de ses solutions, et pourtant il fonctionne correctement sous IE6&7 ... comme expliquez vous cela ?

Merci pour votre aide.
Modifié par dhjapan (05 Apr 2011 - 17:40)
dhjapan a écrit :

Par exemple le widget Profil de twitter (http://twitter.com/about/resources/widgets/widget_profile), semble n'utiliser aucune de ses solutions, et pourtant il fonctionne correctement sous IE6&amp;7 ... comme expliquez vous cela ?

Salut,

Parce que le widget Profil de twitter semble utiliser jQuery et que les actions relatives à cette librairie sont exécutées après chargement complet du DOM.

C'est à dire via :

jQuery(function ($) {
// ce code s'exécutera après le chargement du DOM
}
Non j'ai bien épluché leur code, et il n'y a pas de jQuery du tout.

Après je pige pas tout, mais j'ai l'impression que le script ajoute un feuille de style à charger dans <head></head>, et attends qu'elle soit chargé pour lancer la suite.
Je pense que c'est comme ça qu'ils s'assurent que le DOM soit complet avant de commencer à le manipuler.

render: function () {
    var a = this;
    if (!TWTR.Widget.hasLoadedStyleSheet) {
        window.setTimeout(
            function () {a.render.call(a)}
            , 50
        );
       return this
    }
    ...


Est-ce que c'est ça le truc ?
Modifié par dhjapan (06 Apr 2011 - 12:24)
En allant un peu plus bas dans le fichier js, on trouve ça :

// oh IE we love you.
        // this is needed because you can't modify document body when page is loading
        if (!browser.ie || isLoaded) {
          append();
        }
        else {
          window.attachEvent('onload', function() {
            isLoaded = true;
            append();
          });
        }
Ah oui effectivement ...
Là par contre ca attend le "onload", donc le chargement des fichiers, des iframes etc.

Faut que je teste ça.

Merci