DOMNodeInserted : Ajouter son support sous IE (Internet Explorer 5+)

Sous FireFox

DOMNodeInserted est un évènement de l'objet IHTMLDocument sous FireFox.

Il survient lorsqu'un nouvel élément HTML est ajouté au document.

Sous IE

Internet Explorer ne gère pas cet évènement.

Via un HTC (HTML Component), je lui ai ajouté un événement à comportement semblable.

Je pars d'un événement IE-only qui existe déjà onafterupdate (utilisé lorsqu'on fait du binding HTML/DataBase, donc quasi jamais)

PS : J'aurais pu créer un nouvel évènement (onChildAdded par exemple) mais cela aurait impliqué la création d'un propriété onChildAddedEvent pour tous les IHTMLElement afin de pouvoir appeler l'évent depuis l'élément enfant.

Via le HTC, j'appelle cet évènement sur le parent de tout nouveau noeud HTML (element.parentNode.fireEvent), et la propagation des events fait le reste.

Contrairement à FireFox, cet event n'est pas appelé pour tous les IHTMLNode mais seulement pour les IHTMLElement (les balises <xxx>)

L'évènement marche autant pour un IHTMLElement.appendChild(theNode) que pour un IHTMLElement.innerHTML = "<TheNode />"

L'évènement est appelé directement après l'ajout. Pas besoin de faire un setTimout ou quoique ce soit d'autre pour attendre que l'évent survienne.

Cet HTC ne change pas la manière dont DOMNodeInserted fonctionne sous FireFox et ne lui ajoute pas onafterupdate non plus.

Code Source de OnElementAdded.htc

<script>
    try {
        var ev = document.createEventObject();
        ev.newChild=element;
        ev.documentState=(
            element.document?
            element.document.readyState:
            element.ownerDocument?
                element.ownerDocument.readyState:
                document.readyState);
        ev.dynamicUpdate=(ev.documentState=="complete");
        
        if (element.parentNode) {
            element.parentNode.fireEvent("onafterupdate", ev);
        } else {
            document.fireEvent("onafterupdate", ev);
        }
    } catch (ex) {
        //alert(ex.message);
    }
</script>

 

Code à ajouter à la page principale (dans le HEAD, la place importe peu)

<style>
        * {
            behavior: url('onelementadded.htc');
        }
</style>

Les propriétés de event sont :

event :
- newChild : le nouvel élément
- srcElement : le parent
- dynamicUpdate : dit si l'élément est ajouté après le chargement du DOM ou pas
- cancelBubble : bloque la propagation de l'évent si déclaré false
Publié dimanche 13 janvier 2008 12:05 par FREMYCOMPANY
Classé sous , , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52