Javascript 调用history.back()后未命中Chrome调试器语句

Javascript 调用history.back()后未命中Chrome调试器语句,javascript,google-chrome,debugging,google-chrome-devtools,Javascript,Google Chrome,Debugging,Google Chrome Devtools,如标题所示,尝试将其粘贴到该页面上的Chrome devtools控制台中。代码显示在sources选项卡中,但是调试器语句不充当断点。断点在history.back()之后似乎也不起作用 window.history.pushState("object or string", "Title", window.location.href.substring(window.location.href.lastIndexOf("/")) + '?test'); history.back(); de

如标题所示,尝试将其粘贴到该页面上的Chrome devtools控制台中。代码显示在sources选项卡中,但是
调试器语句不充当断点。断点在
history.back()之后似乎也不起作用

window.history.pushState("object or string", "Title",  window.location.href.substring(window.location.href.lastIndexOf("/")) + '?test');
history.back();
debugger;
有人能告诉我这是为什么吗? 有没有办法改变这种行为


我正在运行Chrome 49.0.2623.112(官方版本)m(32位)

我将为您做一个调查来回答:-):

有关详细信息,请查看中的引用,但高级解释是
history.back()
调用是一个非阻塞调用。当它在事件循环的后续迭代中执行时,很可能会导致某种重置,从而阻止
调试器的完全效果

在我的实验中,如果您要替换
调试器使用预定的调用:
setTimeout(function(){debugger;},{{{任何大于1ms}})
它按预期工作


然而,有趣的观察

我将通过为您做研究来回答:-):

有关详细信息,请查看中的引用,但高级解释是
history.back()
调用是一个非阻塞调用。当它在事件循环的后续迭代中执行时,很可能会导致某种重置,从而阻止
调试器的完全效果

在我的实验中,如果您要替换
调试器使用预定的调用:
setTimeout(function(){debugger;},{{{任何大于1ms}})
它按预期工作


然而,有趣的观察

history.back()。它会立即停止所有脚本,并且永远不会返回。没有执行更多的代码。@Bergi,这不是真的,或者说不准确。例如,使用
alert()
而不是
debugger
history来测试它。back()
会像
location.reload一样导航离开。它会立即停止所有脚本,并且永远不会返回。没有执行更多的代码。@Bergi,这不是真的,或者说不准确。用
alert()
而不是
debugger
自己测试它,谢谢您提供的信息。当我尝试定时调试器时,它只有在延迟超过10毫秒左右时才起作用——这是不一致的。此外,正如G.Stoynev所指出的那样,执行工作仍在正常进行。您链接到的SO答案还建议始终调用标准调试器调用,因为它是同步的。延迟的一个可能不是,但在这种情况下,我们实际上并没有离开页面,我认为它通常会离开。开发人员工具中一定发生了一些奇怪的事情。感觉不应该这样。谢谢你提供的信息。当我尝试定时调试器时,它只有在延迟超过10毫秒左右时才起作用——这是不一致的。此外,正如G.Stoynev所指出的那样,执行工作仍在正常进行。您链接到的SO答案还建议始终调用标准调试器调用,因为它是同步的。延迟的一个可能不是,但在这种情况下,我们实际上并没有离开页面,我认为它通常会离开。开发人员工具中一定发生了一些奇怪的事情。感觉不应该这样。