Question

Un problème très niche :

J'obtiens parfois (30% du temps) une erreur javascript 'gestionnaire non défini' sur la ligne 3877 de la bibliothèque prototype.js (version 1.6.0.2 de google : http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).

Maintenant, sur cette page, j'ai une Google Map et j'utilise la bibliothèque Prototype Window.

Le problème se produit dans IE7 et FF3.

Voici les informations fournies par FireBug :

handler is undefined
? in prototype.js@3871()prototype.js (line 3877)
handler.call(element, event);

Je suis passé à une version locale de prototypejs et j'ai ajouté du débogage dans la méthode incriminée (createWraper) mais le débogage n'apparaît jamais avant l'erreur...

J'ai cherché sur Google et trouvé 1 autre mention de l'erreur sur la même ligne, mais pas de réponse donc je la poste ici où peut-être qu'un jour quelqu'un aura une réponse :).

Était-ce utile?

La solution

Je viens de découvrir que cette erreur se produit également si vous laissez accidentellement la parenthèse lors de votre appel d'observateur :

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp());

au lieu de

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp);

Autres conseils

Cela provoquera probablement une erreur :

Event.observe(myElement, 'click', myFunction(myParameters));

Vous devriez plutôt procéder ainsi :

Event.observe(myElement, 'click', function() { myFunction(myParameters) });

Je suis passé à une version locale de PrototypeJS et j'ai ajouté un peu de débogage dans la méthode offensée (CreateWraper) mais le débogage n'apparaît jamais avant l'erreur ...

En fait, la fonction incriminée appelée lorsque l'erreur se produit est "wrapper" qui est créée dans createWrapper (mais n'y est pas appelée).Fondamentalement, ce qui se passe, c'est que vous avez attaché une fonction en tant que gestionnaire d'événements pour un élément et que la fonction n'existe pas réellement.

Si vous essayez d'insérer des informations de débogage pour essayer d'identifier quelle fonction "n'existe pas", ajoutez vos messages d'alerte ou la sortie de la console Firebug à l'intérieur de la fonction wrapper entre les lignes 3871 et 3878.

Solution vraiment simple pour "gestionnaire non défini" de prototype.js l'erreur dans Prototype est juste...réparer le prototype.J'ai trouvé des conseils ici : https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object et ça marche réellement.

Trouvez simplement la ligne avec :handler.call(element, event); et remplacer parif (handler) handler.call(element, event)problème résolu avec le prototype 1.6.0.3 et le dernier :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top