Accueil > > > AJOUTER 'ADDEVENTLISTENER' SUR INTERNET EXPLORER
AJOUTER 'ADDEVENTLISTENER' SUR INTERNET EXPLORER
Information sur la source
Description
Voici une manière d'ajouter la fonction addEventListener sur Internet Explorer (testé sur la version 7) sans modifier Object.prototype . addEventListener est une fonction décrite dans le DOM Level 2 et qui n'est pas encore prise en charge par IE. La technique est d'overrider les fonctions getElementById, getElementByName, getElementsByTagName. On stock l'ancienne méthode dans une variable (ex. : oldGetElementById) et on appelle l'ancienne méthode à l'interieur du corps de la nouvelle, on modifie le ou les objets récupéré(s) , en ajoutant addEventListener et on retourne ces même objets. - l'utilisateur (le coder) n'y a vu que du feu :) - on ne modifie pas Object.prototype. - on ne reecrit pas "vraiment" les fonctions puisqu'on les appelle de toute façons :)
Source
- //ce code est utile uniquement sur IE,donc
- //on vérifie qu'on est bien sur IE.
- var using_ie = typeof(ActiveXObject)!="undefined";
- if(using_ie)
- {
- //sauvegarde des ancienne méthodes.
- var oldGetElementById = document.getElementById;
- var oldGetElementsByName = document.getElementsByName;
- var oldGetElementsByTagName = document.getElementsByTagName;
-
- //override
- document.getElementById = function(id)
- {
- //appel de l'ancienne méthode pour récupérer l'élement.
- var obj = oldGetElementById(id);
- //ajout des fonctions
- obj.addEventListener = addEventListener;
- obj.executeEvents = executeEvents;
- return obj;
- }
- //comme getElementById mais avec une boucle qui
- //parcourt chacun des éléments.
- document.getElementsByTagName = function(tag)
- {
- var obj = oldGetElementsByTagName(tag);
- for(obj_i=0;obj_i<obj.length;obj_i++)
- {
- obj[obj_i].addEventListener = addEventListener;
- obj[obj_i].executeEvents = executeEvents;
- }
- return obj;
- }
- //identique à getElementsByTagName.
- document.getElementsByName = function(name)
- {
- var obj = oldGetElementsByName(name);
- for(obj_i=0;obj_i<obj.length;obj_i++)
- {
- obj[obj_i].addEventListener = addEventListener;
- obj[obj_i].executeEvents = executeEvents;
- }
- return obj;
- }
-
- //Ajoute l'évenement dans un Array.
- var addEventListener = function(eventName,callback,b)
- {
- //on donne un nom a l'array qui contiendra les callbacks.
- //chaque évenement possede un Array différent.
- var eventArrayName = "ieEventList_"+eventName;
- //Si l'array est inexistant on le crée et on
- //lui indique comment executer les fonctions.
- if(typeof(this[eventArrayName])=="undefined")
- {
- var me = this;
- this[eventArrayName] = new Array();
- this["on"+eventName] = function()
- {
- me.executeEvents(eventName);
- }
- }
- //ajoute la fonction.
- this[eventArrayName].push(callback);
- }
-
- //execute la liste de fonctions se trouvant dans
- //l'Array attribué à un évenement.
- var executeEvents = function(eventName)
- {
- var eventArrayName = "ieEventList_"+eventName;
- if(typeof(this[eventArrayName])=="undefined")
- return;//au cas ou..
- //éxecution de chaque évenement.
- for(eventIndex=0;eventIndex<
- this[eventArrayName].length;eventIndex++)
- {
- this[eventArrayName][eventIndex]();
- }
- }
- }
//ce code est utile uniquement sur IE,donc
//on vérifie qu'on est bien sur IE.
var using_ie = typeof(ActiveXObject)!="undefined";
if(using_ie)
{
//sauvegarde des ancienne méthodes.
var oldGetElementById = document.getElementById;
var oldGetElementsByName = document.getElementsByName;
var oldGetElementsByTagName = document.getElementsByTagName;
//override
document.getElementById = function(id)
{
//appel de l'ancienne méthode pour récupérer l'élement.
var obj = oldGetElementById(id);
//ajout des fonctions
obj.addEventListener = addEventListener;
obj.executeEvents = executeEvents;
return obj;
}
//comme getElementById mais avec une boucle qui
//parcourt chacun des éléments.
document.getElementsByTagName = function(tag)
{
var obj = oldGetElementsByTagName(tag);
for(obj_i=0;obj_i<obj.length;obj_i++)
{
obj[obj_i].addEventListener = addEventListener;
obj[obj_i].executeEvents = executeEvents;
}
return obj;
}
//identique à getElementsByTagName.
document.getElementsByName = function(name)
{
var obj = oldGetElementsByName(name);
for(obj_i=0;obj_i<obj.length;obj_i++)
{
obj[obj_i].addEventListener = addEventListener;
obj[obj_i].executeEvents = executeEvents;
}
return obj;
}
//Ajoute l'évenement dans un Array.
var addEventListener = function(eventName,callback,b)
{
//on donne un nom a l'array qui contiendra les callbacks.
//chaque évenement possede un Array différent.
var eventArrayName = "ieEventList_"+eventName;
//Si l'array est inexistant on le crée et on
//lui indique comment executer les fonctions.
if(typeof(this[eventArrayName])=="undefined")
{
var me = this;
this[eventArrayName] = new Array();
this["on"+eventName] = function()
{
me.executeEvents(eventName);
}
}
//ajoute la fonction.
this[eventArrayName].push(callback);
}
//execute la liste de fonctions se trouvant dans
//l'Array attribué à un évenement.
var executeEvents = function(eventName)
{
var eventArrayName = "ieEventList_"+eventName;
if(typeof(this[eventArrayName])=="undefined")
return;//au cas ou..
//éxecution de chaque évenement.
for(eventIndex=0;eventIndex<
this[eventArrayName].length;eventIndex++)
{
this[eventArrayName][eventIndex]();
}
}
}
Conclusion
hehe
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Evenement onmouseout et Firefox [ par fenzy75 ]
Bonjour ,j'ai un probleme avec un menu deroulant.Mon menu marche tres bien sur MIE mais sous Firefox il semblerai que l'evenement onmouseout ne soit p
Detection du navigateur qui différencie FIREFOX et NETSCAPE [ par barth707 ]
Bonjour,Je cherche depuis un moment déjà une detection en javascript qui me permet de faire la différence entre Firefox et Netscape.Si
window.location et firefox [ par 8livier ]
bonjour,un petit probleme avec firefox....window.location=formulaire.commune.options[formulaire.commune.selectedIndex].value;ne fonctionne pas....Que
menu deroulant sous FIREFOX [ par stopworries ]
Salut tout le monde,J'ai un menu horizontal sur ma page en css et js qui fonctionne tres bien, seulement sous IE. Sous firefox, le menu se decale vers
Evenement "Retour Arriere". [ par Coup2vent ]
Bonjour,Etant novice, je m'adresse a ce forum en esperant avoir une reponse de votre part.Mon problème est le suivant:J'ai une page avec un bouto
saveas sous FireFox [ par crashtest ]
Bonjour,alors c'est simple je voudrais faire pareil que le saveas de IE mais sous FireFox voila @++ et merci pour vos réponse.Mes sitewebs (fonct
detecter Firefox (et non netscape) [ par Breskovic ]
Bonjour, mon site pose un problème sérieux avec Netscape (PC/Mac), et seulement Netscape. Je ne peux donc pas laisser un utilisateur Netsca
Comment mettre Date et Heure valide pour IE, Nescape, Firefox [ par JLB59 ]
Bonjour tout le monde, J'ai fait un site que j'ai mis en ligne. Comme j'utilisais IE en local pour voir le résultat, je n'ai eu aucun prb. J'ai
URGENT !! Probleme sur l'evenement Onchange sur un objet Input type Text [ par jolazoule ]
Bonjour,je développe actuellement un panier pour un site marchand. Sur la page recapitulative il y le nom du produit puis une TextBox <input t
utilisation de document.location.reload sous firefox [ par josymarc ]
Bonjour,Après avoir cherché partout une réponse, je fais une dernière tentative. Dans mon portail, j'ai une page qui permet de cho
|
Derniers Blogs
SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|