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

问题描述 投票:1回答:3

这是问题的精华:

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

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

第一个window.open和window.close调用工作,但第二个window.open调用不起作用。即使我延迟它,让窗口时间先关闭:

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'); 

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

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

javascript window.open childwindow
3个回答
0
投票

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

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

0
投票

原来这是我的Chrome浏览器中的默认弹出窗口拦截器设置。当我更改设置时,它可以正常工作。感谢takrishna指出我正确的方向。但这确实意味着我可能会使用不同的策略并远离儿童窗户。


-1
投票

要打开多个窗口,您需要指定第二个名称,如下所示。

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

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

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

你可以在这里查看https://javascript.info/popup-windows的详细信息

© www.soinside.com 2019 - 2024. All rights reserved.