ブラウザのデバッガを使ってのデータ検索

ブラウザのJavaScriptはwindowオブジェクトをルートとして変数が定義されるので
windowオブジェクトから再帰的に指定した値を検索し
見つけたオブジェクト階層を出力することができるのではないかと思い
簡単なスクリプトを書いてみた。
※感覚的にはバイナリエディタでデータ値を検索しアドレスを見つける感じで。


(function(root,data,lvl){let logmax=99,cntmax=10000000;let cnt=0,a=[],r=[],b=[];function f(o){ if(b.indexOf(o)>=0)return;b.push(o);for(let k in o){if(!logmax || cntmax<=cnt)return;a.push(k);cnt++;if(o[k]===data){r.push(a.concat());logmax--;}if(lvl>a.length){if(o[k]) try{f(o[k]);}catch(e){}}a.pop();}};f(root);r.push("search "+cnt+" objects");return r;})(window,"find data",4);

最後の引数はそれぞれ
ルートオブジェクト,検索値,検索最大階層
となっている。

アクセスしたらだめなオブジェクトがあったりして使用時はwindowオブジェクト以外のオブジェクト指定か
ちょっとした改造が必要かもしれない。

動作確認はChromeでDeveloperツールを起動し停止後
Consoleに張り付けて行った。
そのさいconsole.logをつぶされているサイトがあったため使用しないようにした。