Знайдіть визначення функції JavaScript у Chrome


282

Інструменти для розробників Chrome гойдаються, але одне, що, здається, не має (що я міг би знайти), це спосіб знайти визначення функції JavaScript. Це було б дуже зручно для мене, оскільки я працюю на сайті, який включає багато зовнішніх файлів JS. Звичайно, греп вирішує це, але в браузері було б набагато краще. Я маю на увазі, браузер повинен це знати, то чому б не розкрити його? Я очікував щось таке:

  • На сторінці виберіть "Перевірити елемент", на якому відображається рядок на вкладці "Елементи"
  • Клацніть рядок правою кнопкою миші та виберіть "Перейти до визначення функції"
  • Правильний скрипт завантажується на вкладку Сценарії та переходить до визначення функції

По-перше, чи існує ця функціональність, і я її просто відсутній?

Якщо це не так, я здогадуюсь, що це походило б із WebKit, але нічого не вдалося знайти для запитів на функції інструмента розробника або Bugzilla WebKit .


3
На вкладці Сценарії є панель пошуку, яка обробляє поточний файл, і ви можете зазирнути до вмісту функції, роздрукувавши її. Але мені зараз цікаво, чи є спосіб зробити більш загальний пошук, як вам хочеться ...
hugomg

3
За допомогою Інструментів для розробників Google Chrome у вікні "Джерела" Торкніться -> праворуч, ви маєте можливість встановити "Точки перерви події".

У моєму випадку у мене була змінна установка на невідому функцію. Я зробив myvar.toString (), і він надрукував: "функція Object () {[рідний код]}", що все, що мені потрібно знати.
Кільце

Відповіді:


366

Скажімо, ми шукаємо функцію з назвою foo:

  1. (відкрити розробники інструментів Chrome),
  2. Windows: ctrl+ shift+ Fабо macOS: cmd+ optn+ F. Це відкриває вікно для пошуку всіх сценаріїв.
  3. поставте прапорець "Регулярний вираз",
  4. пошук foo\s*=\s*function(шукає foo = functionбудь-яку кількість пробілів між цими трьома лексемами),
  5. натисніть на повернутий результат.

Інший варіант визначення функції - function\s*foo\s*\(для function foo(будь-якої кількості пробілів між цими трьома лексемами.


8
Тепер про це я говорю! Я не мав уявлення, що панель навіть існує - а як би ти?
Ryan DuVal

22
cmd + опція + F на OSX
Stiggler

2
Це лише один спосіб визначення функції з назвою foo. Є й інші. Що робити, якщо наша функція є, наприклад bar['foo']? (На це питання немає гарної відповіді, наскільки я знаю --- це, по суті, "не пишіть перекручений код")
Стівен Лу

1
Не вдалося знайти "визначення функції" за допомогою обраної відповіді. Я шукав в Google і не зміг знайти жодної допомоги. (Використовуючи версію Chrome 41.0.2272.118 м)
Web_Developer

7
І тоді ви не зможете знайти декларації функцій, динамічно генеровані вирази функцій та анонімні (безіменні) функції. Я б хотів щось подібне Firefox: Клацніть посилання на функцію на панелі годинника -> Перейти до посилання на функцію.
Fagner Brack

77

Цей приземлився в Chrome в 2012-08-26. Не знаючи точної версії, я помітив це в Chrome 24.

Скріншот вартує мільйона слів:

 Інструменти Chrome Dev> Консоль> Показати визначення функції

Я оглядаю об’єкт методами в консолі. Клацнувши по кнопці "Показати визначення функції", відводить мене до місця у вихідному коді, де визначена функція. Або я можу просто навести курсор на function () {слово, щоб побачити функціональне тіло в підказці. Ви можете легко оглянути всю прототипну ланцюжок, як це! CDT напевно рок !!!

Сподіваюсь, вам всім це стане в нагоді!


1
Чи є ярлик або функція, яка дозволяє здійснювати пошук за посиланням функції? наприклад "> перевірити (document.body)". Поки що я повинен d> tmp = {a: myFunc}; > tmp, а потім "Показати визначення функції"
Dennis C

16
Я думаю, що ти можеш зробитиdir(myFunc)
Дмитро Пашкевич

dir (myFunc) набагато краще, але все ж потрібні два кліки та миша
Dennis C

1
О, ти маєш на увазі, якщо ти можеш це зробити повністю з клавіатури? Щось схоже findDefinition(myFunc)? AFAIK, який ще не існує ...
Дмитро Пашкевич

Якщо у вас немає об'єкта, що містить функцію, ви можете створити навколо нього об'єкт, який буде працювати. Напр. Типу консолі:, ({1:somefunction})потім клацніть правою кнопкою миші функцію всередині надрукованого об’єкта.
Захисник один

47

Ви можете роздрукувати функцію, оцінивши її назву в консолі, як так

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

це не буде працювати для вбудованих функцій, вони відображатимуться лише [native code]замість вихідного коду.

EDIT : це означає, що функція була визначена в поточному діапазоні.


1
Це не працює для мене (навіть w / функції, визначені на сторінці):> toggle_search ReferenceError: toggle_search не визначено
Ryan DuVal

Аа, дивіться мою редакцію. Інше, використовуючи функцію пошуку, допоможе вам. Chrome devtools - це не IDE, це налагоджувач :)
joar

1
Це працює для пошуку поточно активного визначення функції.
Патрік

1
Це фактично означає, що функція була визначена в поточному діапазоні.
Джонатан

1
@aroth Принаймні в Chrome 45, це знову працює. Я знаю, що все змінилося десь між ними, коли це було розміщено і зараз. Зрештою, це, здається, працює знову.
неділя

32

Оновлення 2016 року : у версії Chrome 51.0.2704.103

Є Go to memberярлик (перелічено в settings > shortcut > Text Editor). Відкрийте файл, що містить вашу функцію (на sourcesпанелі DevTools) і натисніть:

ctrl+ shift+O

або в OS X:

+ shift+O

Це дозволяє перелічити та отримати доступ до членів поточного файлу.


1
добре, що це, здається, робить, це не "перейти до визначення" довільного виклику функції, а "показати вам всі назви функцій у поточному файлі та відпустити їх до них" - що теж корисно.
Скотт Вівер

Це саме те, що я шукав, особливість, схожа на firefox! У firefox ви можете просто відкрити інструменти розробки, натисніть Ctrl + f, і він буде шукати функцію JS на всіх панелях (HTML / CSS / Javascript / тощо). Це робить це, на відміну від функцій регулярного вираження, згаданих в інших відповідях.
javaBean007

@Randy, на якій версії хрому? Яка ОС? Я використовую Chrome версії 59.0.3071.115 на OS X, і він працює чудово.
arthur.sw

@ arthur.sw Вибачте, я не розумів, що вам потрібно бути в джерелах, щоб це працювало. Я очікував, що він буде працювати і в консолі.
Ренді

Для мене відкриється хромоване меню, якщо натиснути цю комбінацію клавіш на консолі розробника.
Чорний

19

Іншим способом навігації до місця визначення функції буде пробивання налагоджувача десь ви можете отримати доступ до функції та ввести повнофункціональне ім'я в консолі. Це надрукує визначення функції в консолі та дасть посилання, яке при натисканні відкриє місце скрипту, де визначена функція.


17

Різні браузери роблять це по-різному.

  1. Спочатку відкрийте вікно консолі, клацнувши правою кнопкою миші на сторінці та вибравши "Перевірити елемент", або натиснувши його F12.

  2. На консолі введіть ...

    • Firefox

      functionName.toSource()
    • Хром

      functionName

функція, яку я шукаю, - stop (), і вона використовується як onmouseover = "this.stop ();" коли я виконую те, що ви говорите, він повертається: stop () {[рідний код]} Що робити тепер?
Тарік

functionName.toSource()також працює на останніх хромованих версіях.
Sourav Ghosh

1
@Tarik Подивіться онлайн-документацію на вбудований stop.
Позов по

@QPaysTaxes Спасибі, тепер я розумію, що коли він повертається: stop () {[рідний код]} там власний код означає, що це не приватна функція, це внутрішня функція, і я повинен шукати онлайн-документацію функції.
Тарік


5

Я вважаю, що найшвидший спосіб знайти глобальну функцію - це просто:

  1. Виберіть вкладку " Джерела" .
  2. У області перегляду натисніть + та введіть вікно
  3. Ваші глобальні посилання на функції перераховані спочатку за алфавітом.
  4. Клацніть правою кнопкою миші функцію, яка вас цікавить.
  5. У спливаючому меню виберіть Показати визначення функції .
  6. Панель вихідного коду переходить на визначення цієї функції.

1

У інструменті Google Chrome, Інспектування елементів ви можете переглянути будь-яке визначення функції Javascript.

  1. Перейдіть на вкладку Джерела. Потім виберіть індексну сторінку. Пошук функції.

введіть тут опис зображення

  1. Виберіть функцію, а потім клацніть правою кнопкою миші функцію та виберіть "Оцінити вибраний текст у консолі".

введіть тут опис зображення



0

У мене була подібна проблема з пошуком джерела методу об'єкта. Назва об'єкта була myTreeі його метод load. Я ставлю точку розриву на лінії, що називається методом. Перезавантаживши сторінку, виконання зупинилося в цьому пункті. Потім на консолі DevTools я набрав об'єкт разом із назвою методу, тобто myTree.loadнатиснув Enter. Визначення методу було надруковано на консолі:

введіть тут опис зображення

Також, клацнувши правою кнопкою миші на визначення, ви можете перейти до його визначення у вихідному коді:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.