使用Chrome Devtools查找哪个变量包含一个值

Find which variable holds a value using Chrome Devtools

本文关键字:变量 包含一 Chrome Devtools 查找 使用      更新时间:2023-09-26

我正在尝试访问远程web应用程序中的一些值来构建Chrome扩展。

为此,我想找到哪个JS变量包含给定的值,我想知道是否可以对内存中所有变量的值进行某种"全局搜索"。

用任何工具都可以做到这一点吗?检查员、档案员等等。。。?

这个答案的所有功劳都归于tomwrong。有关此片段的问题/改进的更多详细信息,请参阅他的回答。

代码

function globalSearch(startObject, value) {
    var stack = [[startObject,'']];
    var searched = [];
    var found = false;
    var isArray = function(test) {
        return Object.prototype.toString.call( test ) === '[object Array]';
    }
    while(stack.length) {
        var fromStack = stack.pop();
        var obj = fromStack[0];
        var address = fromStack[1];
        if( typeof obj == typeof value && obj == value) {
            var found = address;
            break;
        }else if(typeof obj == "object" && searched.indexOf(obj) == -1){
           if ( isArray(obj) ) {
              var prefix = '[';
              var postfix = ']';
           }else {
              var prefix = '.';
              var postfix = '';
           }
           for( i in obj ) {
              stack.push( [ obj[i], address + prefix + i + postfix ] );
           }
           searched.push(obj);
        }
    }
    return found == '' ? true : found;
}

您可以迭代全局范围中的所有项,如下所示:

var test = 123,
    someVar = 812;
for(key in window){
    if(typeof window[key] === 'number' && window[key] == 123){
        console.log(key, window[key]);
    }
}

将其与一些递归相结合,理论上可以迭代对象中可用的所有对象及其子对象:

function searchObject(object, search){
    for(key in object){
        if(typeof object[key] === 'number' || typeof object[key] === 'string'){
            if(object[key] === search){
                console.log(key, window[key]);
            }
        }else if(typeof object[key] === 'object'){
            searchObject(object[key], search);
        }
    }
}

这只是一个快速而肮脏的示例。它只检查严格的相等性(所以没有"string contains"),并在具有for in的数组上迭代,这是邪恶的。但它应该让你知道它是如何工作的。

不过,不要将windowdocument传递给此函数。由于循环引用,这将不起作用。


但是,您也可以在chrome-dev工具中的代码中放置断点
然后,您可以在右侧的"范围变量"区域中检查变量的当前值。