AJOUTER 'ADDEVENTLISTENER' SUR INTERNET EXPLORER

XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 - 11 sept. 2008 à 17:15
hdescure Messages postés 1 Date d'inscription lundi 1 février 2010 Statut Membre Dernière intervention 12 mai 2010 - 12 mai 2010 à 12:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47916-ajouter-addeventlistener-sur-internet-explorer

hdescure Messages postés 1 Date d'inscription lundi 1 février 2010 Statut Membre Dernière intervention 12 mai 2010
12 mai 2010 à 12:47
pas mal et très pratique pour les codeurs DOM,
juste 4 petites corrections

1 - Surcharger document.createElement()

var oldCreateElement=document.createElement;
//override

document.createElement= function(type)
{
//appel de l'ancienne méthode pour récupérer l'élement.
var obj = oldCreateElement(type)
//ajout des fonctions
obj.addEventListener = addEventListener;
obj.executeEvents = executeEvents;
return obj;
}

2 - modifier l'appel des callback car avec this[eventArrayName][eventIndex]() on perd la référence à this dans la fonction de callback : il faut écrire

//this[eventArrayName][eventIndex]();
this.tempEventFunction=this[eventArrayName][eventIndex];
this.tempEventFunction()

3 - Surcharger directement document.addEventListener car par mal de codes font le test sur la définition de addEventListener donc dans les dernières lignes du if il faut ajouter
document.addEventListener=addEventListener;
window.addEventListener=addEventListener;
document.executeEvents = executeEvents;
window.executeEvents = executeEvents;

4 - un petit changement cosmétique non nécessaire pour éviter surcharger plusieurs fois le tout, modif de la condition du if
if(using_ie && !(document.addEventListener))
cs_depression Messages postés 100 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 13 juillet 2009
13 sept. 2008 à 18:15
"y a pas que des utilisateurs de firefox faut penser aussi au utilisateur IE même si IE est en retard sur le dom"

Les utilisateurs d'IE, j'y pense, et puis j'oublie.

Bon, Firefox est connu. Les internautes font leurs choix, moi aussi.

Et c'est vrai qu'il n'y a pas que Firefox, il y a aussi Opera.
djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009
13 sept. 2008 à 12:05
depression: y a pas que des utilisateurs de firefox faut penser aussi au utilisateur IE même si IE est en retard sur le dom ...

très bonne source :)

car le but c'est de rendre un site toujours compatible a tout navigateur
the_wwt Messages postés 177 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 16 janvier 2009 1
12 sept. 2008 à 13:15
Source élégante!
Pur s'abstenir de tester l'extraordinaire multitude de machines virtuelles javascript, il existe prototype: mature, élégant, plébisciter par tout le monde ( même google qui le propose en version compressé ).

Juste pour dire que la remarque de coucou47 n'est pas à suivre ( changer l'itération par compteur avec le for (.. in ..)).
Si tu fais ce genre d'itération, tu vas tomber sur des propriétés ajoutées par l'utilisateur exemple:
var o = [1,2,3,4];
o.maFonction = function(){ alert("bonjour");}
for( var p in o ){
alert(p + "=" + o[p]);
}
>Affiche:
1,2,3,4 et "function(){ alert("bonjour");}"

Alors quefor(var i 0, length o.length; i < length; i++){
alert(i + "=" + o[i]);
}
>Affiche:
1,2,3,4

Donc à éviter.
Cordialement,
Pierrick
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 sept. 2008 à 13:01
xtremduke++ pour l'ensemble de ses réponses

attachEvent ou addEventListener
dans ta "fonction générale" et c'est tout.
en 3 lignes quoi.
et rien à tester, à faire... pour les utilisateurs

je ne vais pas paul et mickey sur ces stupidités
de soit disant normes !
ce ne sont que des recommandations ( avec 20 ans
de retard sur l'existant pour ne critiquer que cet aspect ),
ni des normes ni des standards... et chaque constructeur
n'en respecte que ce qui l'arrange ( les cas des navigateurs
n'est presque qu' anecdotique dans ces recommandations )
( certes aujourd'hui il parait que c'est IE qui les
respecte le moins )

et je m'arrête ici aussi....
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 sept. 2008 à 09:11
:) sympa comme source

juste une petite remarque :
for(eventIndex=0;eventIndex<this[eventArrayName].length;eventIndex++)
=>
for(eventIndex in this[eventArrayName])
XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
11 sept. 2008 à 21:34
Mdr ok je vai m'arreter là...
cs_depression Messages postés 100 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 13 juillet 2009
11 sept. 2008 à 18:37
"Un site correctement développé a le même rendu sous IE que sous les autres navigateurs."

@XTREMDUKE:

Certainement pas! Il faut d'abord dev le code correctement, aux normes du W3C, puis, perdre du temps à l'adapter pour IE...
li9 Messages postés 57 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 septembre 2008 1
11 sept. 2008 à 18:12
Hello!
Merci pour vos commentaires :)
Alors , XtremDuke, le bute de cette source est justement d'éviter attachEvent(). parce que vérifier partout dans le code si on est sur IE ou FF ou autre c est plutot agaçant :p .Et en plus on respecte les normes.
Depression : ton pseudo est flippant lol.
Je suis d accord, ça n'ets pas mon job de faire ca,
mais si on doit attendre que IE respecte le DOM, on aura encore des if(ie) ... dans 10 ans :)
Ce sont des branquignoles je suis d'ac. ^^

Vous trouvez pas ça sympa de faire directement :
var obj = document.getElementById("bla");
obj.addEventListener("keydown",function(){},true);
peut importe le navigateur ?

En tout cas merci encore pour vos commentaires!

++
XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
11 sept. 2008 à 18:01
"et qu'il ne faut pas s'étonner si le rendu est minable."

Un site correctement développé a le même rendu sous IE que sous les autres navigateurs.
cs_depression Messages postés 100 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 13 juillet 2009
11 sept. 2008 à 17:50
addEventListener n'est pas dans IE7?

Les branquignoles...

Bon, tu as fais une bonne source, c'est une bonne idée, même si je pense que ce n'était pas à toi de faire ce travail, mais aux développeurs du navigateur IE.

Pour ma part, j'utilise Event.Observe() du framework Prototype, et je suis moins embêté par les caprices d'IE, même si j'ai tendance à me moquer du rendu pour mon site perso sur ce navigateur comme de ma première gastro. Je mets juste une note sur le site comme quoi IE est (franchement) obsolète, et qu'il ne faut pas s'étonner si le rendu est minable.

Quoi qu'il en soit, bon boulot!
XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
11 sept. 2008 à 17:15
Ca ne serait pas plus simple d'utiliser attachEvent() ?
Rejoignez-nous