使用Chrome Devtools查找哪个变量包含一个值
Find which variable holds a value using Chrome Devtools
我正在尝试访问远程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
的数组上迭代,这是邪恶的。但它应该让你知道它是如何工作的。
不过,不要将window
或document
传递给此函数。由于循环引用,这将不起作用。
但是,您也可以在chrome-dev工具中的代码中放置断点
然后,您可以在右侧的"范围变量"区域中检查变量的当前值。
相关文章:
- 在javascript regexp中捕获多个变量的一种更简单的方法
- 此变量是一个数组.为什么它返回未定义
- Javascript变量包含特殊字符
- 从javascript变量创建一个数组
- 如何在javascript中用字符串变量替换一段文本
- 重定向到同一页面,但其中包含一条消息
- 重定向到同一页面,但其中包含一条消息
- 如何只包含一次javascript文件
- 响应字段包含一个子级时的节点 SOAP 强制数组
- Javascript:一个变量包含值,但Firebug说它是空的
- 如何用变量定义一个数组,然后用一个数字填充每个数组
- 将变量放在一个中
- 在 javascript 中 for 循环的每次迭代中声明一个新的、唯一的变量是一种好方法
- PHP 变量包含 HTML 和 JavaScript.通过JavaScript将其注入HTML不起作用
- 如何在初始化新数组时使用变量(包含数组形式的文本)
- 在客户端上从 Meteor.call 获取未定义,但在服务器上变量包含数据
- jQuery 变量包含 “ 和 '
- 使用Chrome Devtools查找哪个变量包含一个值
- 变量包含值,但在操作中它们等于NULL
- 在递归中使用全局变量是一种好的做法吗