343 votes

Trouver la définition d'une fonction JavaScript dans Chrome

Les outils de développement de Chrome sont excellents, mais une chose qu'ils ne semblent pas avoir (à ma connaissance) est un moyen de trouver la définition d'une fonction JavaScript. Ce serait super pratique pour moi, car je travaille sur un site qui comprend de nombreux fichiers JS externes. Bien sûr, grep résout ce problème, mais dans le navigateur serait beaucoup mieux. Je veux dire, le navigateur doit le savoir, alors pourquoi ne pas l'exposer ? Ce que j'attendais était quelque chose comme :

  • Sélectionnez "Inspecter l'élément" dans la page, ce qui met en évidence la ligne dans l'onglet Éléments.
  • Cliquez avec le bouton droit de la souris sur la ligne et sélectionnez "Aller à la définition de la fonction".
  • Le script correct est chargé dans l'onglet script et il saute à la définition de la fonction.

Tout d'abord, cette fonctionnalité existe-t-elle et je ne la vois pas ?

Et si ce n'est pas le cas, je suppose que cela viendrait de WebKit, mais je n'ai rien pu trouver pour Demandes de fonctionnalités de l'outil du développeur o Bugzilla de WebKit .

3 votes

Une barre de recherche permet de rechercher le fichier actuel dans l'onglet scripts et vous pouvez jeter un coup d'œil au contenu d'une fonction en l'imprimant. Mais je suis maintenant curieux de savoir s'il existe un moyen de faire une recherche plus générale comme vous le souhaitez...

3 votes

Avec les Google Chrome Developer Tools, dans la fenêtre "Sources" Tap -> droite, vous avez la possibilité de définir des "Event Breakpoints".

1 votes

Dans mon cas, j'avais une variable définie sur une fonction inconnue. J'ai fait myvar.toString() et ça a donné : "function Object() { [native code] }" ce qui est tout ce que j'avais besoin de savoir.

410voto

zplesivcak Points 2633

Disons que nous cherchons une fonction nommée foo :

  1. (ouvrez Chrome dev-tools),
  2. Les fenêtres : ctrl + shift + F ou macOS : cmd + optn + F . Cela ouvre une fenêtre de recherche sur tous les scripts.
  3. cochez la case "Expression régulière",
  4. recherche de foo\s*=\s*function (recherche de foo = function avec un nombre quelconque d'espaces entre ces trois jetons),
  5. appuyer sur un résultat retourné.

Une autre variante pour la définition des fonctions est function\s*foo\s*\( para function foo( avec un nombre quelconque d'espaces entre ces trois jetons.

9 votes

Voilà ce que je veux dire ! Je n'avais aucune idée que cette vitre existait -- et comment le sauriez-vous ?

0 votes

Excellente réponse - je n'ai pas pu trouver cette recherche dans aucun des menus - on dirait une fonction cachée ?

4 votes

Ce n'est qu'une façon de définir une fonction nommée foo . Il en existe d'autres. Et si notre fonction était par exemple bar['foo'] ? (Il n'y a pas de bonne réponse à cette question, pour autant que je sache --- il s'agit essentiellement de "ne pas écrire de code alambiqué").

92voto

Dmitry Pashkevich Points 4160

Ce site a atterri dans Chrome le 2012-08-26 Je ne suis pas sûr de la version exacte, je l'ai remarqué dans Chrome 24.

Une capture d'écran vaut un million de mots :

Chrome Dev Tools > Console > Show Function Definition

J'inspecte un objet avec des méthodes dans la console. En cliquant sur "Afficher la définition de la fonction", j'accède à l'endroit du code source où la fonction est définie. Ou bien je peux simplement passer la souris sur l'icône function () { mot pour voir le corps de la fonction dans une infobulle. Vous pouvez facilement inspecter toute la chaîne de prototypes de cette manière ! Le CDT est vraiment génial !

J'espère que vous trouverez tous ces informations utiles !

3 votes

Existe-t-il un raccourci ou une fonction qui permette de rechercher par une référence de fonction ? comme ">inspect(document.body)". Pour l'instant, je dois d > tmp={a:myFunc} ; >tmp, suivi de "Show function definition".

20 votes

Je pense que vous pouvez faire dir(myFunc)

1 votes

Dir(myFunc) est beaucoup mieux, mais nécessite toujours deux clics de souris.

56voto

joar Points 4110

Vous pouvez imprimer la fonction en évaluant son nom dans la console, comme suit

> unknownFunc
function unknownFunc(unknown) {
    alert('unknown seems to be ' + unknown);
}

cela ne fonctionnera pas pour les fonctions intégrées, elles afficheront seulement [native code] au lieu du code source.

EDIT : cela implique que la fonction a été définie dans la portée actuelle.

1 votes

Cela ne fonctionne pas pour moi (même avec des fonctions définies dans la page) : > toggle_search ReferenceError : toggle_search n'est pas défini

0 votes

Aah, voir mon édition. Sinon, utiliser la fonction de recherche t'aidera. Chrome devtools n'est pas un IDE, c'est un débogueur :)

0 votes

C'est pas grave, c'est parce que c'était dans un iframe. Une autre question cependant, y a-t-il un moyen de voir dans quel fichier la fonction est définie ?

39voto

arthur.sw Points 5016

Mise à jour de 2016 : dans Chrome Version 51.0.2704.103

Il existe un Go to member raccourci (listé dans settings > shortcut > Text Editor ). Ouvrez le fichier contenant votre fonction (dans le dossier sources du panneau DevTools) et appuyez :

ctrl + shift + O

ou dans OS X :

+ shift + O

Cela permet de lister et d'atteindre les membres du dossier en cours.

20voto

Deepak Dixit Points 701

Les différents navigateurs font cela différemment.

  1. Ouvrez d'abord la fenêtre de la console en cliquant avec le bouton droit de la souris sur la page et en sélectionnant "Inspecter l'élément", ou en appuyant sur la touche F12 .

  2. Dans la console, tapez...

    • Firefox

      functionName.toSource()
    • Chrome

      functionName

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