在全局范围内查找JavaScript函数

时间:2012-09-15 14:24:33

标签: javascript dom firebug google-chrome-devtools

有没有办法在当前的实时对象模型中搜索JavaScript属性(例如命名函数)(Firebug在'DOM'选项卡上显示的内容,我在Chrome开发者工具中找不到直接的等效内容)当前加载的页面,使用主浏览器的常见开发人员工具?

一个例子是我搜索'beta'并且开发人员工具向我显示类似window.alpha.beta的内容,这意味着某些脚本文件在窗口对象上创建了一个名为'alpha'的对象,该对象具有一个属性测试

我明确地想要搜索所有脚本文件中的字符串(例如 Chrome开发者工具中的Ctrl-Shift-F)。

用例是我想从扩展名/ userscript调用页面的一个功能。我知道函数存在,但它是使用复杂的框架创建的,我不知道它在页面的对象模型中最终会在哪里。

PS:欢迎使用与术语相关的问题编辑。

4 个答案:

答案 0 :(得分:3)

加载https://github.com/angus-c/waldo并从控制台使用它看起来应该可以解决问题。稍微复杂但也与工具无关。

答案 1 :(得分: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。 你走的越深,所需的时间就越长。

答案 2 :(得分:0)

如果该功能是全局功能,您可以使用 this constructor 从用户脚本中调用它:

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'

由于无法从全局范围调用闭包,因此您必须使用字符串搜索来获取其中任何一个(据我所知)。

答案 3 :(得分:-1)

我能想到的唯一方法是解析您的脚本并使用正则表达式来避免字符串以及您可能不需要的其他情况。