2

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

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

我明确不想在所有脚本文件中搜索字符串(例如Ctrl-Shift-FChrome 开发者工具中)。

用例是我想从扩展/用户脚本调用页面的功能。我知道该函数存在,但它是使用复杂的框架创建的,我不知道它在页面的对象模型中的哪个位置结束。

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 回答