2

現在のライブオブジェクトモデル(Firebugが「DOM」タブに表示するもの、Chrome開発者ツールで直接同等のものを見つけることができませんでした)でJavaScript属性(名前付き関数など)を検索する方法はありますか?メインブラウザの一般的な開発者ツールを使用してページをロードしましたか?

たとえば、'beta' を検索すると、開発者ツールは のようなものをwindow.alpha.beta表示します。これは、何らかのスクリプト ファイルがウィンドウ オブジェクトに 'alpha' という名前のオブジェクトを作成し、属性 beta を持つことを意味します。

すべてのスクリプト ファイル (たとえば、Chrome 開発者ツール) で文字列を検索したくありませんCtrl-Shift-F

ユースケースは、拡張機能/ユーザースクリプトからページの関数を呼び出したいということです。関数が存在することは知っていますが、複雑なフレームワークを使用して作成されており、ページのオブジェクト モデルのどこにあるのかわかりません。

PS: 質問の用語関連の編集は大歓迎です。

4

4 に答える 4

3

https://github.com/angus-c/waldoを読み込んでコンソールから使用すると、うまくいくようです。もう少し複雑ですが、ツールに依存しません。

于 2012-09-15T14:44:17.253 に答える
1

コメントで書いた再帰型関数を無名関数として書き上げました

(function(searchTerm, parent, parentStr, depthLeft, parentsArr){
    var p = parent || window,
        child, cObj = null,
        s = parentStr || '',
        r = [],
        d = (depthLeft > 0 ? depthLeft-1 : 5),
        pArr = parentsArr || [p];
    for( child in p ){
        cObj = p[child];
        if ( child === searchTerm ) r[ r.length ] = (s+'.'+child).slice(1);
        if( d > 0 && cObj !== null && p.hasOwnProperty(child) && typeof cObj === 'object' && cObj !== p && pArr.indexOf(cObj) === -1 )
            r = r.concat( arguments.callee( searchTerm, cObj, s+'.'+child, d, pArr.concat([cObj]) ) );
    }
    return r;
})('createElement');

.createElement最後の行は、 から始まるを検索することを意味しwindowます。深ければ深いほど時間がかかります。

于 2012-09-15T15:58:16.963 に答える
0

関数がグローバルの場合、このコンストラクターを使用してユーザースクリプトから呼び出すことができます:

var global = new Global(); // Initialize the Global constructor
// Some code
var globalVar = global.get('variableName'); // Assign the global variable 'variableName' to the local variable 'globalVar'

クロージャはグローバル スコープから呼び出すことができないため、文字列検索を使用してクロージャを取得する必要があります (私の知る限り)。

于 2014-03-24T00:06:55.697 に答える
-1

私が考えることができる唯一の方法は、スクリプトを解析し、正規表現を使用して文字列やその他の望ましくないケースを回避することです。

于 2012-09-15T14:35:21.590 に答える