Javascript 如何搜索浏览器窗口对象,查看哪个对象或变量具有搜索的值?
如果我知道我在浏览器的全局空间的某个对象中存储了一个值,比如“JohnSmith”,并且我遇到了某个断点,那么我如何知道哪个对象或变量的值是“JohnSmith”?我有数百个对象,我不想在开发工具中手动搜索它。 我在控制台或代码段中使用了一些脚本,它们遍历了所有对象,但它们都未能正确搜索或给出一些错误消息Javascript 如何搜索浏览器窗口对象,查看哪个对象或变量具有搜索的值?,javascript,google-chrome,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Devtools,如果我知道我在浏览器的全局空间的某个对象中存储了一个值,比如“JohnSmith”,并且我遇到了某个断点,那么我如何知道哪个对象或变量的值是“JohnSmith”?我有数百个对象,我不想在开发工具中手动搜索它。 我在控制台或代码段中使用了一些脚本,它们遍历了所有对象,但它们都未能正确搜索或给出一些错误消息 我尝试了看起来很有希望的方法,但在我的61版Chrome中根本不起作用。它的子选项卡不像他们的视频节目那样显示 以下是我保存在devtools snippets面板中的一个片段: { co
我尝试了看起来很有希望的方法,但在我的61版Chrome中根本不起作用。它的子选项卡不像他们的视频节目那样显示 以下是我保存在devtools snippets面板中的一个片段:
{
const checked = new Set();
const dig = (value, o=window, path='') => {
function check(v, name) {
if ((typeof v == 'string' || typeof v == 'number')
&& String(v).toLowerCase().includes(value)) {
console.log('%s in %s %o', v, path + name, o);
} else if (v && typeof v == 'object' && v != window && !v.nodeName) {
dig(value, v, path + name + '.');
}
}
if (o && o.forEach) {
for (let len = o.length, i; i < len; i++)
check(o[i], `[${i}]`);
} else if (typeof o == 'object') {
for (const k of Object.getOwnPropertyNames(o)) {
if (k.startsWith('webkit'))
continue;
try {
const v = o[k];
if (checked.has(v))
continue;
checked.add(v);
check(v, k);
}
catch(e) {}
}
} else
check(v);
};
console.group();
dig('JohnSmith');
console.groupEnd();
}
您可以按Ctrl-Enter键运行devtools代码段。以下是我保存在devtools代码段面板中的代码段:
{
const checked = new Set();
const dig = (value, o=window, path='') => {
function check(v, name) {
if ((typeof v == 'string' || typeof v == 'number')
&& String(v).toLowerCase().includes(value)) {
console.log('%s in %s %o', v, path + name, o);
} else if (v && typeof v == 'object' && v != window && !v.nodeName) {
dig(value, v, path + name + '.');
}
}
if (o && o.forEach) {
for (let len = o.length, i; i < len; i++)
check(o[i], `[${i}]`);
} else if (typeof o == 'object') {
for (const k of Object.getOwnPropertyNames(o)) {
if (k.startsWith('webkit'))
continue;
try {
const v = o[k];
if (checked.has(v))
continue;
checked.add(v);
check(v, k);
}
catch(e) {}
}
} else
check(v);
};
console.group();
dig('JohnSmith');
console.groupEnd();
}
按Ctrl-Enter键可以运行devtools代码段。有对象列表吗?还是要检查全局空间中的所有对象?全部或从一个对象开始。因此,窗口或对象的名称可以作为执行搜索的函数的输入参数。被搜索的对象是否位于使用let声明的变量中?这些不作为窗口属性存在,我不知道您可以搜索它们的名称空间。Traktor53应用程序与不支持let的浏览器兼容。所以let不被使用。你有对象列表吗?还是要检查全局空间中的所有对象?全部或从一个对象开始。因此,窗口或对象的名称可以作为执行搜索的函数的输入参数。被搜索的对象是否位于使用let声明的变量中?这些不作为窗口属性存在,我不知道您可以搜索它们的名称空间。Traktor53应用程序与不支持let的浏览器兼容。所以让我们不要使用。