Rechercher la définition de la fonction JavaScript dans Chrome

282

Les outils de développement de Chrome sont géniaux, mais une chose qu'ils ne semblent pas avoir (que je pourrais trouver) 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, ce serait beaucoup mieux. Je veux dire, le navigateur doit savoir cela, alors pourquoi ne pas l'exposer? Je m'attendais à quelque chose comme:

  • Sélectionnez «Inspecter l'élément» sur la page, qui met en surbrillance la ligne dans l'onglet Éléments
  • Cliquez avec le bouton droit sur la ligne et sélectionnez «Aller à la définition de la fonction»
  • Le script correct est chargé dans l'onglet Scripts et il passe à la définition de la fonction

Tout d'abord, cette fonctionnalité existe-t-elle et je la manque juste?

Et si ce n'est pas le cas, je suppose que cela proviendrait de WebKit, mais je n'ai rien trouvé pour les demandes de fonctionnalités de Developer Tool ou Bugzilla de WebKit .

Ryan DuVal
la source
3
Il y a une barre de recherche qui accueille le fichier actuel dans l'onglet Scripts et vous pouvez jeter un œ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 ...
hugomg
3
Avec les outils de développement de Google Chrome, dans les "Sources" Tapez -> la fenêtre de droite vous avez la possibilité de définir des "points d'arrêt d'événement".
Dans mon cas, j'avais une variable définie sur une fonction inconnue. J'ai fait myvar.toString () et il a imprimé: "function Object () {[code natif]}" qui est tout ce que j'avais besoin de savoir.
Anneau

Réponses:

366

Disons que nous recherchons une fonction nommée foo:

  1. (ouvrez les outils de développement Chrome),
  2. Windows: ctrl+ shift+ Fou macOS: cmd+ optn+ F. Cela ouvre une fenêtre de recherche dans tous les scripts.
  3. cochez la case "Expression régulière",
  4. rechercher foo\s*=\s*function(recherche foo = functionavec n'importe quel nombre d'espaces entre ces trois jetons),
  5. appuyez sur un résultat renvoyé.

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

plesiv
la source
8
Voilà de quoi je parle! Je ne savais même pas que le volet existait - et comment le feriez-vous?
Ryan DuVal
22
cmd + option + F sur OSX
Stiggler
2
Ce n'est qu'une façon de définir une fonction nommée foo. Il y en a d'autres. Et si notre fonction est par exemple bar['foo']? (Il n'y a pas de bonne réponse à cette question, pour autant que je sache --- c'est essentiellement "n'écrivez pas de code alambiqué")
Steven Lu
1
Je n'ai pas pu trouver de "définition de fonction" en utilisant la réponse sélectionnée. J'ai cherché sur Google et je n'ai trouvé aucune aide. (En utilisant Chrome Version 41.0.2272.118 m)
Web_Developer
7
Et puis vous ne parvenez pas à trouver des déclarations de fonction, des expressions de fonction générées dynamiquement et des fonctions anonymes (sans nom). Je préfère quelque chose comme Firefox: cliquez sur la référence de fonction dans le panneau de montre -> Aller à la référence de fonction.
Fagner Brack
77

Cela a atterri dans Chrome le 2012-08-26 Pas sûr de la version exacte, je l'ai remarqué dans Chrome 24.

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

 Outils de développement Chrome> Console> Afficher la définition de la fonction

J'inspecte un objet avec des méthodes dans la console. Cliquer sur "Afficher la définition de la fonction" m'amène à l'endroit du code source où la fonction est définie. Ou je peux simplement survoler le function () {mot pour voir le corps de la fonction dans une info-bulle. Vous pouvez facilement inspecter toute la chaîne de prototypes comme ceci! CDT définitivement rock !!!

J'espère que vous le trouverez tous utile!

Dmitry Pashkevich
la source
1
Existe-t-il un raccourci ou une fonction qui permettra de rechercher par une référence de fonction? comme "> inspecter (document.body)". Pour l'instant je dois d> tmp = {a: myFunc}; > tmp, suivi de la "Afficher la définition de la fonction"
Dennis C
16
Je pense que vous pouvez le fairedir(myFunc)
Dmitry Pashkevich
dir (myFunc) est beaucoup mieux, mais nécessite toujours deux clics et souris
Dennis C
1
Oh, tu veux dire si tu peux le faire complètement à partir du clavier? Quelque chose comme ça findDefinition(myFunc)? AFAIK qui n'existe pas encore ...
Dmitry Pashkevich
Si vous n'avez pas d'objet contenant la fonction, vous pouvez créer un objet autour d'elle et cela fonctionnera toujours. Par exemple, dans le type de console:, ({1:somefunction})puis cliquez avec le bouton droit sur la fonction à l'intérieur de l'objet imprimé.
Protector one
47

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

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

cela ne fonctionnera pas pour les fonctions intégrées, elles s'afficheront uniquement à la [native code]place du code source.

EDIT : cela implique que la fonction a été définie dans le cadre actuel.

joar
la source
1
Cela ne fonctionne pas pour moi (même avec les fonctions définies dans la page):> toggle_search ReferenceError: toggle_search n'est pas défini
Ryan DuVal
Aah, voir mon montage. Sinon, l'utilisation de la fonction de recherche vous aidera. Chrome devtools n'est pas un IDE, c'est un débogueur :)
joar
1
Cela fonctionne pour trouver la définition actuellement active de la fonction.
Patrick
1
Cela implique en fait que la fonction a été définie dans la portée actuelle .
Jonathan
1
@aroth Au moins dans Chrome 45, cela fonctionne à nouveau. Je suis conscient que les choses ont changé quelque part entre les deux lorsque cela a été publié et maintenant. En conclusion, il semble fonctionner à nouveau.
joar
32

Mise à jour 2016 : dans la version Chrome 51.0.2704.103

Il existe un Go to memberraccourci (répertorié dans settings > shortcut > Text Editor). Ouvrez le fichier contenant votre fonction (dans le sourcespanneau des DevTools) et appuyez sur:

ctrl+ shift+O

ou sous OS X:

+ shift+O

Cela permet de lister et d'atteindre les membres du fichier actuel.

arthur.sw
la source
1
eh bien, ce qui semble ne pas être "aller à la définition" d'un appel de fonction arbitraire, mais "vous montrer tous les noms de fonction dans le fichier en cours et vous laisser y aller" - ce qui est également utile.
Scott Weaver
C'est exactement ce que je cherchais, une fonctionnalité similaire à Firefox! Dans Firefox, vous pouvez simplement ouvrir les outils de développement, appuyez sur Ctrl + f, et il recherchera la fonction JS dans tous les volets (HTML / CSS / Javascript / etc.). Cela le fait, contrairement aux fonctionnalités d'expression régulière mentionnées dans d'autres réponses.
javaBean007
@Randy, sur quelle version de chrome? Quel OS? J'utilise la version Chrome 59.0.3071.115 sur OS X et cela fonctionne très bien.
arthur.sw
@ arthur.sw Désolé, je ne savais pas que vous deviez être dans les sources pour que cela fonctionne. Je m'attendais à ce qu'il fonctionne également dans la console.
Randy
Pour moi, un menu chrome s'ouvre si j'appuie sur cette combinaison de touches dans la console de développement.
Black
19

Une autre façon de naviguer vers l'emplacement d'une définition de fonction serait de casser le débogueur quelque part où vous pouvez accéder à la fonction et d'entrer le nom complet des fonctions dans la console. Cela imprimera la définition de la fonction dans la console et donnera un lien qui, au clic, ouvre l'emplacement du script où la fonction est définie.

Răzvan Flavius ​​Panda
la source
17

Différents navigateurs le font différemment.

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

  2. Dans la console, tapez ...

    • Firefox

      functionName.toSource()
    • Chrome

      functionName
Deepak Dixit
la source
la fonction que je recherche est stop () et elle est utilisée comme onmouseover = "this.stop ();" quand je fais ce que vous dites, il retourne: stop () {[code natif]} Alors que faire maintenant?
Tarik
functionName.toSource()fonctionne également sur les dernières versions chromées.
Sourav Ghosh
1
@Tarik Consultez la documentation en ligne du module intégré stop.
Fund Monica's Lawsuit
@QPaysTaxes Merci, je comprends maintenant que quand il revient: stop () {[code natif]} il y a du code natif Ce n'est pas une fonction privée, c'est une fonction interne et je devrais chercher la documentation en ligne de la fonction.
Tarik
6

dans la console Chrome:

debug(MyFunction)
MyFunction()
Igor Krupitsky
la source
1
J'aime ça. Remarquable: faites un undebug(MyFunction)pour supprimer à nouveau le point d'arrêt (après avoir trouvé l'implémentation de la méthode)
Andreas Dolk
5

Je trouve que le moyen le plus rapide de localiser une fonction globale est simplement:

  1. Sélectionnez les sources onglet .
  2. Dans le volet de surveillance, cliquez sur + et tapez fenêtre
  3. Vos références de fonction globale sont répertoriées en premier, par ordre alphabétique.
  4. Cliquez avec le bouton droit sur la fonction qui vous intéresse.
  5. Dans le menu contextuel, sélectionnez Afficher la définition de la fonction .
  6. Le volet de code source passe à cette définition de fonction.
Chris Robinson
la source
1

Dans Google Chrome, l'outil d'inspection des éléments, vous pouvez afficher n'importe quelle définition de fonction Javascript.

  1. Cliquez sur l'onglet Sources. Sélectionnez ensuite la page d'index. Recherchez la fonction.

entrez la description de l'image ici

  1. Sélectionnez la fonction, puis cliquez avec le bouton droit sur la fonction et sélectionnez «Évaluer le texte sélectionné dans la console».

entrez la description de l'image ici

subhro
la source
0

J'ai eu un problème similaire pour trouver la source de la méthode d'un objet. Le nom de l'objet était myTreeet sa méthode était load. J'ai mis un point d'arrêt sur la ligne que la méthode a été appelée. En rechargeant la page, l'exécution s'est arrêtée à ce stade. Ensuite, sur la console DevTools, j'ai tapé l'objet avec le nom de la méthode, c'est myTree.load-à- dire et appuyez sur Entrée. La définition de la méthode a été imprimée sur la console:

entrez la description de l'image ici

De plus, en faisant un clic droit sur la définition, vous pouvez accéder à sa définition dans le code source:

entrez la description de l'image ici

Abdollah
la source