即使使用 setTimeout 也无法在同一块中重新打开子 window

Can't reopen child window in the same block even with a setTimeout

这里是问题的提炼:

如果我打开控制台并将以下代码作为一个块输入:

var existingWin = window.open('', 'footerContent'); 
existingWin.close();
var existingWin = window.open('', 'footerContent')

第一个 window.open 和 window.close 调用有效,但第二个 window.open 调用无效。即使我延迟给 window 时间先关闭:

var existingWin = window.open('', 'footerContent'); 
existingWin.close();
setTimeout(function() {var existingWin = window.open('', 'footerContent')}, 3000) 

没用。但是如果我单独执行前两行:

var existingWin = window.open('', 'footerContent'); 
existingWin.close();

然后分别输入:

var existingWin = window.open('', 'footerContent'); 

它现在打开 window。这表明问题是 运行 它们在同一代码块中。

这导致我正在构建的单元测试出现问题。任何人都可以帮助我理解为什么会发生这种情况以及是否有办法解决它?提前致谢。

使用单词 var 初始化或重置变量。试试不带那个词,比如:

    existingWin = window.open('', 'footerContent');

要打开多个 window,您需要指定唯一的第二个名字,如下所示。

var existingWin = window.open('', 'footerContent'); 

var existingWin = window.open('', 'footerContent1');

var existingWin = window.open('', 'footerContent2');

您可以在此处查看详细信息https://javascript.info/popup-windows

原来这是我的 Chrome 浏览器中的默认弹出窗口阻止程序设置。当我更改设置时,它可以正常工作。感谢 takrishna 为我指明了正确的方向。但这确实意味着我可能会使用不同的策略并远离 child windows.