57 votes

Comment savoir d'où provient l'alerte ?

Je suis juste curieux de savoir
Existe-t-il un moyen, quel que soit le navigateur, de savoir d'où provient l'alerte que je reçois ?

Je l'ai essayé dans chrome mais il n'y a pas de pile d'appel disponible lorsque l'alerte s'affiche.

Une idée ?

3 votes

Ça pourrait être lié : stackoverflow.com/questions/3638249/

122voto

pimvdb Points 66332

Vous pouvez écraser alert et créer un Error pour la trace de la pile :

var old = alert;

alert = function() {
  console.log(new Error().stack);
  old.apply(window, arguments);
};

0 votes

Merci ! Je n'ai jamais pensé que l'alerte était un membre de la fenêtre !

0 votes

Il peut également être pratique de remplacer l'instruction console.log par une instruction de débogage afin de se retrouver dans le débogueur à l'endroit où alert a été appelé.

1 votes

Je ne peux pas vous remercier assez pour cela. J'ai un vieux site web avec beaucoup de problèmes. L'un d'entre eux était XSS partout. J'ai donc mis une valeur à <script>alert('XSS!');</script> Ensuite, il y a eu le cauchemar de localiser tous les endroits où la chaîne a été évaluée et où des alertes sont apparues. Votre réponse a été extrêmement utile. Maintenant, laissez-moi retenir mon souffle et retourner dans ce cloaque.

7voto

Herberth Amaral Points 820

Vous pouvez monkeypatch l'alerte pour le faire :

//put this at the very top of your page:
window.alert = function() { throw("alert called") }

5voto

Piskvor Points 46986

Que diriez-vous d'envelopper le alert ?

window.original_alert = alert;
alert = function (text) {
    // check the stack trace here
    do_some_debugging_or_whatever();

    // call the original function
    original_alert(text);
}

Cela devrait être compatible avec tous les navigateurs.

2voto

Aswin Points 107

Il existe une fonction de traçage de la console qui est fournie par tous les principaux navigateurs. console.trace() ;

Avec l'approche Proxy, comme décrit dans les réponses précédentes, et console.trace(), nous pouvons imprimer la pile entière avec le numéro de ligne dans la console elle-même.

(function(proxied) {
  window.alert = function() {
    console.trace();
    return proxied.apply(this, arguments);
  };
})(window.alert);

Il s'agit d'un IIFE. Chaque appel d'alerte aura sa trace imprimée dans la console.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X