google-chrome - 如何在 Chrome 开发者工具中导出 DOM 祖先列表?
问题描述
我正在尝试确定一个元素是否在多个(嵌套)iframe 中。如果我检查一个元素,我会在检查器窗格的底部得到各种面包屑:
有时这个祖先列表很长,很难通过滚动来分析结构。如何导出或以其他方式捕获此列表?
解决方案
一种解决方法是使用devtools-on-devtools从 devtools UI 获取该数据:
切换到
Elements
面板打开devtools-on-devtools(见下文)并在控制台中运行它:
console.log($$('devtools-node-text', UI.panels.elements._breadcrumbs.shadowRoot).map(el => $$('span', el.shadowRoot).map(el => el.innerText).join('')).join('\n'))
它会像这样打印文本:
html.html__responsive.html__unpinned-leftnav body.question-page.unified-theme div.container div#content.snippet-hidden
实际数据存储在
UI.panels.elements._breadcrumbs
及其各种属性中。作为一个幻想它的例子:
(() => { let num = 0; const args = []; const root = UI.panels.elements._breadcrumbs.shadowRoot; $$('devtools-node-text', root).forEach(bc => { num++; let info = ''; $$('span', bc.shadowRoot).map(({innerText: s}, i) => { if (!i) { args.push(`font-weight:bold;${s === 'iframe' ? 'color:red;' : ''}`, s, 'font-weight:normal'); } else { info += s; } }); args.push(info); }); console.log('%c%s%c%s\n'.repeat(num), ...args); })();
为方便起见,您可以将代码保存在片段中并稍后从那里运行它,或者通过在命令面板(Ctrl-P或Cmd-P热键)中键入片段名称来运行它。
如何打开 devtools-on-devtools:
推荐阅读
- scala - 如何在应用级别覆盖日志级别
- spfx - 带有输入框 tabIndex 的 MS Fabric DetailList 始终呈现为 -1
- gnuplot - 来自数据文件的 Gnuplot 3D 条形图
- terraform - 使用 terraform 创建子网的顺序
- java - Jackson:如何动态设置属性的别名
- android - 构建一个在片段之间有不同测验q的应用程序,我用什么来保持运行分数?
- tcl - 反斜杠的模式匹配问题
- javascript - 是否可以获得像这种格式的 http 引用标头,例如:http://example.com
- swift - UITabBar isTranslucent 增加了一个额外的UITabBar?
- javascript - 更改 addEventListener 内部的变量