bug fireEvent dans core.js sous IE9

11847 vues
14 juillet 2014
Joachim
core-js

 

Bonjour les gens

Voila, Pour l'optimisation d'un site joomla, on cherche à gérer les appels des fichiers javascript. Or Joomla charge automatiquement et bêtement la librairie mootools à toutes les pages. Il nous faut donc retirer mootools (on préfère jQuery qui est nettement plus pratique)

On installe donc le plugin InterExt qui se charge d'appeler jQuery à la place de mootools.

MAIS (car oui, il y a un mais)

SOUS IE9 les formulaires ne sont plus envoyés !!!

Le problème vient de fireEvent qui sous IE9 aurait des ratés

Qu'a cela ne tienne ! débuggons dans la joie et la bonne humeur le fichier core.js (situé dans notre cas dans le dossier media/system/js/core.js) et une fois le fichier déminifié gràce au site http://jsbeautifier.org/ retrouvons nous ligne 11 et remplacons les lignes suivantes

if ("function" == typeof b.onsubmit) b.onsubmit();
    "function" == typeof b.fireEvent && b.fireEvent("submit");

par celles ci :

/*modifs joachim*/
    /*if ("function" == typeof b.onsubmit) b.onsubmit();//ne fonctionne pas sous IE9
    "function" == typeof b.fireEvent && b.fireEvent("submit");*/
    if (document.addEventListener) {
        // alert("IE9 or greater");
    }else{
        if ("function" == typeof b.onsubmit) b.onsubmit();
        "function" == typeof b.fireEvent && b.fireEvent("submit");
    }
    /*fin modifs joachim*/

c'est tout bête, on vérifie la version du navigateur avant d'appeler la fonction :)

Voila, c'est déjà fini !