【问题标题】:How to search the browser window object looking which object or variable has the searched-for value?如何搜索浏览器窗口对象以查找哪个对象或变量具有搜索值?
【发布时间】:2017-10-04 04:03:53
【问题描述】:

如果我知道我在浏览器的全局空间中的某个对象中存储了一个值“JohnSmith”并且我遇到了某个断点,我如何知道哪个对象或变量的值是“JohnSmith”?我有数百个对象,我不想在开发工具中手动搜索它。 我在控制台或 sn-p 中使用了一些脚本,它们遍历所有对象,但它们都未能正确搜索或给出一些错误消息。

我尝试了JS Runtime Inspector,它看起来很有希望,但在我的 61 版 Chrome 中根本不起作用。它的子选项卡不像他们的视频节目那样显示。

【问题讨论】:

  • 您有对象列表吗?还是要检查全局空间中的所有对象?
  • 全部或从一个对象开始。所以窗口或对象的名称可以作为搜索函数的输入参数
  • 搜索到的对象是否可以在使用let 声明的变量中?这些不作为窗口属性存在,我不知道您可以搜索它们的名称空间。
  • Traktor53 App 兼容不支持 let 的浏览器。所以不使用 let。

标签: javascript google-chrome google-chrome-devtools


【解决方案1】:

这是我保存在 devtools sn-ps 面板中的一个 sn-p:

{
  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 sn-ps。

【讨论】:

  • 网络平台有什么改变来打破这个吗? 2021 年我在这方面并没有取得太大的成功。
  • 我偶尔使用它,仍然有效。您可能需要修改代码,例如它不查看键名。
猜你喜欢
  • 1970-01-01
  • 2019-01-18
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多