ChromeでJavaScript関数定義を見つける


282

Chromeの開発者ツールはすばらしいですが、(私が見つけることができた)Chromeにないように見えることの1つは、JavaScript関数の定義を見つける方法です。多くの外部JSファイルを含むサイトで作業しているので、これは私にとって非常に便利です。確かにgrepはこれを解決しますが、ブラウザでははるかに優れています。つまり、ブラウザはこれを知っている必要があるので、公開してみませんか?私が期待したのは次のようなものでした:

  • [要素]タブの行を強調表示するページから[要素の検査]を選択します
  • 行を右クリックして、「関数定義に移動」を選択します。
  • 正しいスクリプトが[スクリプト]タブに読み込まれ、関数定義にジャンプします

まず、この機能はありますか?

そうでない場合、これはWebKitによるものだと思いますが、開発者ツールの機能リクエストWebKitのBugzillaについては何も見つかりませんでした。


3
[スクリプト]タブには現在のファイルを検索する検索バーがあり、印刷して関数の内容を確認できます。しかし、あなたが望むようなより一般的な検索を行う方法があるなら、私は今
好奇心があり

3
Google Chromeデベロッパーツールの[ソース]タップ->右ウィンドウで、[イベントブレークポイント]を設定できる可能性があります。

私の場合、変数が不明な関数に設定されていました。myvar.toString()を実行すると、「function Object(){[native code]}」と出力されました。
鳴らす

回答:


366

次の名前の関数を探しているとしfooます。

  1. (オープンChrome開発ツール)、
  2. Windows:ctrl+ shift+ F、またはmacOS: cmd+ optn+ F。これにより、すべてのスクリプトを検索するためのウィンドウが開きます。
  3. 「正規表現」チェックボックスをチェックし、
  4. 検索foo\s*=\s*functionfoo = functionこれら3つのトークンの間に任意の数のスペースを入れて検索)、
  5. 返された結果を押します。

関数定義のもう1つのバリアントはfunction\s*foo\s*\(function foo(これら3つのトークンの間に任意の数のスペースがある場合です。


8
今それが私が話していることです!ペインが存在することさえ知りませんでした。
Ryan DuVal

22
cmd + option + F on OSX
Stiggler

2
これは、という関数を定義する唯一の方法fooです。他にもあります。たとえば、私たちの機能が次の場合はどうなりますbar['foo']か?(私が知る限り、この質問に対する良い答えはありません---本質的には「複雑なコードを記述しないでください」)
Steven Lu

1
選択した回答で「関数定義」が見つかりませんでした。私はグーグルで検索しましたが、助けが見つかりませんでした。(Chromeバージョン41.0.2272.118 mを使用)
Web_Developer 2015

7
そして、関数宣言、動的に生成された関数式、無名(無名)関数を見つけることができません。Firefoxのようなものを使いたい:ウォッチパネルの関数リファレンスをクリック->関数リファレンスにジャンプします。
Fagner Brack

77

これは2012-08-26にChromeに導入されまし た。正確なバージョンがわからないので、Chrome 24で確認しました。

スクリーンショットは100万語の価値があります。

 Chrome Dev Tools> Console> Show Function Definition

コンソールでメソッドを使用してオブジェクトを検査しています。「関数定義を表示」をクリックすると、ソースコードの関数が定義されている場所に移動します。または、function () {単語の上にカーソルを合わせると、ツールチップに関数本体が表示されます。このようにプロトタイプチェーン全体を簡単に検査できます!CDTは間違いなくロックです!!!

皆様のお役に立てれば幸いです。


1
関数参照で検索できるショートカットまたは関数はありますか?"> inspect(document.body)"のように。とりあえず、d> tmp = {a:myFunc}にする必要があります。> tmpの後に「関数定義を表示」
デニスC

16
できると思いますdir(myFunc)
ドミトリーパシュケビッチ2013

dir(myFunc)の方がはるかに優れていますが、2クリックとマウスが必要です
Dennis C

1
ああ、キーボードから完全にできるとしたら?のようなものfindDefinition(myFunc)?まだ存在しないAFAIK ...
Dmitry Pashkevich

関数を含むオブジェクトがない場合は、その周囲にオブジェクトを作成できますが、機能します。たとえば、コンソールタイプ:({1:somefunction})で、印刷されたオブジェクト内の関数を右クリックします。
プロテクター1

47

次のように、コンソールで関数の名前を評価して関数を印刷できます

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

これは組み込み関数では機能せず[native code]、ソースコードの代わりに表示されるだけです。

編集:これは、関数が現在のスコープ内で定義されていることを意味します。


1
それは私にとっては機能しません(ページ内で定義された関数を含めても):> toggle_search ReferenceError:toggle_searchが定義されていません
Ryan DuVal

ああ、私の編集を参照してください。それ以外の場合は、検索機能を使用すると役立ちます。Chrome devtoolsはIDEではなく、デバッガです:)
joar

1
これは、関数の現在アクティブな定義を見つけるために機能します。
Patrick 14

1
実際には、関数が現在のスコープ内で定義されていることを意味します。
ジョナサン

1
@aroth少なくともChrome 45では、これは再び機能します。これが投稿されたときと今の間に、物事がどこかで変わったことを知っています。結論として、それは再び動作するようです。
joar

32

2016年の更新:Chromeバージョン51.0.2704.103

Go to memberショートカットがあります(に記載settings > shortcut > Text Editor)。(sourcesDevTools のパネルで)関数を含むファイルを開き、次のキーを押します。

ctrl+ shift+O

またはOS Xの場合:

+ shift+O

これにより、現在のファイルのメンバーを一覧表示してアクセスできます。


1
まあ、これが任意の関数呼び出しの「定義に移動」するのではなく、「現在のファイル内のすべての関数名を表示して、それらに移動させる」こともそうです-これもちょっと便利です。
Scott Weaver

これはまさに私が探していたもので、Firefoxに似た機能です!Firefoxでは、開発ツールを開いてCtrl + fを押すだけで、すべてのペイン(HTML / CSS / Javascript /など)でJS関数を検索できます。これは、他の回答で述べられている正規表現機能とは異なり、それを行います。
javaBean007 2016年

@ランディ、どのバージョンのクロムですか?どのOSですか?OS XでChromeバージョン59.0.3071.115を使用していますが、正常に動作します。
arthur.sw 2017

@ arthur.sw申し訳ありませんが、これが機能するためにはソースにいる必要があるとは思いませんでした。コンソールでも動作することを期待していました。
ランディ

私にとっては、開発コンソールでそのキーの組み合わせを押すとクロムメニューが開きます。
ブラック

19

関数定義の場所に移動する別の方法は、関数にアクセスしてコンソールで関数の完全修飾名を入力できる場所でデバッガーを中断することです。これにより、コンソールに関数定義が印刷され、リンクをクリックすると、関数が定義されているスクリプトの場所が開きます。


17

ブラウザーが異なれば、これも異なります。

  1. まず、ページを右クリックして[要素の検査]を選択するか、を押して、コンソールウィンドウを開きますF12

  2. コンソールで、次のように入力します...

    • Firefox

      functionName.toSource()
    • クロム

      functionName

私が探している関数はstop()で、onmouseover = "this.stop();"として使用されています。私があなたが言うことをするとき、それは戻ります:stop(){[native code]}では、今何をすべきか?
Tarik

functionName.toSource()最新のChromeバージョンでも動作します。
Sourav Ghosh 2015

1
@Tarik組み込みのオンラインドキュメントを見てくださいstop
モニカの訴訟に資金を提供

@QPaysTaxesおかげで、私はそれが戻ったときに理解します:stop(){[ネイティブコード]} ネイティブコードがあることを意味します。
タリク

6

Chromeコンソール:

debug(MyFunction)
MyFunction()

1
私はすきです。注意:(undebug(MyFunction)メソッドの実装を見つけた後で)ブレークポイントを再度削除するためにa を実行してください
Andreas Dolk

5

グローバル関数を見つける最も簡単な方法は簡単です:

  1. ソース」タブを選択します。
  2. ウォッチペインをクリック+とタイプの
  3. グローバル関数参照は、最初にアルファベット順にリストされています。
  4. 目的の関数を右クリックします。
  5. ポップアップメニューで[ 関数定義を表示]を選択します。
  6. ソースコードペインがその関数定義に切り替わります。

1

Google Chrome、Inspect要素ツールでは、Javascript関数の定義を表示できます。

  1. 「ソース」タブをクリックします。次に、インデックスページを選択します。関数を検索します。

ここに画像の説明を入力してください

  1. 関数を選択してから関数を右クリックし、[コンソールで選択したテキストを評価]を選択します。

ここに画像の説明を入力してください



0

オブジェクトのメソッドのソースを見つけるのと同じような問題がありました。オブジェクト名はmyTreeで、メソッドはでしたload。メソッドが呼び出された行にブレークポイントを設定しました。ページをリロードすると、その時点で実行が停止しました。次に、DevToolsコンソールで、オブジェクトをメソッド名と共に入力し、myTree.loadEnterキーを押しました。メソッドの定義はコンソールに出力されました:

ここに画像の説明を入力してください

また、定義を右クリックすると、ソースコードでその定義に移動できます。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.