如何将焦点切换到 Firefox Web Tools 中的检查器选项卡?

How to switch focus to the Inspector tab in Firefox Web Tools?

网站中的按钮在单击时会触发弹出菜单(仅在单击时触发,悬停时不会触发)。我希望能够检查此弹出菜单,但在我右键单击它并 select "Inspect Element" 后,它消失了,所以我无法再检查它。

显示弹出菜单时,我可以看到它的一个条目出现在“检查器”选项卡的 HTML 中,但是当我单击该条目时,弹出菜单消失了 HTML条目。

对于将鼠标悬停在按钮上(未单击)时出现菜单的情况,我会单击“检查器”选项卡中的条目以将焦点切换到它,然后我只需将鼠标悬停在按钮上并使用箭头键导航到“检查器”选项卡中的条目。但是由于需要点击这个按钮,所以我失去了对 Inspector 选项卡的关注。

我认为这可以通过将焦点切换到 Firefox 的 Web 工具中的“检查器”选项卡而不单击任何内容来解决。

我试过使用不同的快捷方式,例如 Ctrl+Shift+C 或 Ctrl+Shift+I(打开 Web 工具),但我无法将焦点切换到“检查器”选项卡以进行导航使用这些快捷方式后 HTML。

我也尝试过使用检查模式(“检查器”选项卡左侧的按钮),它可以让我检查我单击的任何内容。这种方法的问题是,要进入菜单,我需要先点击一个按钮,而检查模式只检查我点击的第一件事。也许有一种方法可以在检查模式下忽略第一次点击?

编辑:
多次按 TAB 键,有时会聚焦在检查器选项卡上。有时它只是循环浏览网站中的元素,从不关注检查器选项卡。即便如此,当我能够使用 TAB 键聚焦在检查器选项卡上时,弹出菜单在按 TAB 键大约 20 次后消失了,所以我需要一种不使用 TAB 键的不同方法。

我有一个 deviantart 帐户,所以我能够重现您描述的问题。

问题是当 window 模糊或点击页面时,点击时出现的弹出窗口被隐藏。因为聚焦检查器总是会导致内容 window 模糊,所以您无法在保持弹出窗口显示的同时切换到检查器。

因此,正如@Callahad 在评论中所说,这里唯一可行的选择是使用断点强制 javascript 代码在某个时间点暂停,这样您就可以检查弹出窗口而无需它在你之下被关闭。

现在,问题就变成了:这个时间点是什么时候,怎么在那里设置断点。

  • 出现弹出窗口时:单击编辑按钮的元素时会发生这种情况。如果您可以在调试器面板中的这一行添加一个断点,那么您就可以单击编辑按钮,逐步执行代码直到显示弹出窗口,然后再次切换到检查器进行检查.不幸的是,此事件的 javascript 事件处理程序位于节点的 onclick 属性中,您不能在那里设置断点。
  • 当弹窗即将隐藏时。这发生在 window 模糊。要在那里设置断点,您可以尝试按照以下步骤操作:
    • 在检查器中找到 html 元素(这是显示添加到 window 的事件的元素),
    • 点击旁边的[ev]图标,
    • 在出现的列表中找到 "blur" 事件,
    • 单击它旁边的调试器图标,这会将您带到右行的调试器,希望如此
    • 如果需要,可以使用调试器左下角的 {} 按钮漂亮地打印代码
    • 在此代码的正确位置添加断点
    • 然后只需单击以显示弹出窗口,然后单击 window 外部,这将暂停 javascript 您添加断点的执行,即在弹出窗口隐藏之前,因此让您有机会切换到检查器并在关闭前检查弹出窗口。
  • 弹出窗口也会在页面点击时隐藏,因此您可以通过查看此事件来做同样的事情。

另一种有效的方法可能是:

覆盖隐藏弹出窗口的代码! Javascript 是动态的,因此您完全可以将其转化为您的优势。找到deviantart代码中隐藏popup的函数,改一下。 通过快速查看 Web 控制台中 window 对象上的内容,我很幸运地发现:Popup2.hideAll。因此,如果您只是 运行 Web 控制台中的此内容:Popup2.hideAll = function(){},然后打开弹出窗口,它将一直停留在那里,并且在您重新加载页面之前不会再次隐藏。这为您提供了一种检查它的好方法。

最后,处理 DOM 更改的一种非常好的方法是在开发工具中添加 "break on DOM mutations" 功能。 Firebug 有这个,Chrome devtools 也有,不幸的是 Firefox doesn't yet

此功能的想法很简单,在检查器中:右键单击任何节点(在本例中,弹出窗口将出现在 DOM 中的父元素),select "break on mutation",然后单击以打开弹出窗口。当弹出窗口插入 DOM 时,devtools 会看到这一点并自动停止 javascript 执行。