调试器没有在Javascript中单步执行window.close

时间:2016-08-24 11:32:57

标签: javascript google-chrome

我正在使用谷歌浏览器,我有一个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但是没有用。然后,窗口关闭。

关闭弹出窗口后如何执行脚本? (显然,代码由关闭的)父窗口拥有

2 个答案:

答案 0 :(得分:1)

尝试将您的代码移动到.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

答案 1 :(得分:1)

这似乎是Chrome中的一个错误。

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团队自己筹码,或者Chromium项目出现了错误,否则我怀疑我们会得到更多......