调试器没有步进窗口.在Javascript中关闭

Debugger not stepping through window.close in Javascript

本文关键字:Javascript 窗口 步进 调试器      更新时间:2023-09-26

我使用谷歌浏览器,我有一个Javascript代码,打开一个弹出窗口,并关闭它的工作完成后。我的代码类似于这样:

myWindow = window.open(...); //it opens successfully.
[code here is executed successfully]
myWindow.close(); //can't get after this point
[some more code that I can't reach]

在关闭窗口后我有更多的代码,但调试器从未在该点之后步骤。我甚至试着把debugger;放在close后面,但无济于事。窗口可以很好地关闭。

如何在关闭弹出窗口后执行脚本?(显然,代码属于而不是关闭的父窗口)

这似乎是Chrome浏览器的一个bug。

debugger;                 // Stops
var x = '0';              // F10
console.log(x);           // F10
var mW = window.open();   // F10
x = '1';                  // F10
console.log(x);           // F10
mW.close();               // F10
debugger;                 // Skipped
x = '2';                  
debugger;                 // Stops
console.log(x);           // F10

看起来你不能在window.close()之后立即停止调试器,除非一些其他代码先执行-例如赋值,或console.log。即使在 window.close()之后的第一个语句上设置断点也不会导致调试器再次中断——但是在之后的行上设置断点,紧接window.close() 之后的行将会导致调试器中断。

可能不是一个令人满意的答案,但除非Chrome团队自己来Stack,或者铬项目提出了一个错误,我怀疑我们会得到更多的…

试着像这样移动你的代码到.onbeforeunload函数:

myWindow = window.open(...); //it opens successfully.
myWindow.onbeforeunload = function() {
    [some more code that I can't reach]
}
[code here is executed successfully]
myWindow.close(); //can't get after this point