此问题仅发生在Edge中,但适用于IE11和Chrome。有办法绕过这个吗?
- 主窗口打开第一个子窗口(当最终用户单击主窗口中的链接时为Javascript
window.open
) - 然后,当最终用户点击第一个子窗口中的按钮时,JS将关闭这个第一个子窗口
- 然后JS代码让主窗口通过JS代码(
1st_child_window.opener.open
)打开第二个子窗口 - 如果最终用户试图关闭这个第二个子窗口(调用JS
window.close
的按钮或浏览器提供的"X"按钮),它会间歇性工作。很多时候,它无法关闭,并保持为空白弹出窗口。它只能被"任务管理器"杀死 - 如果步骤#2被注释掉(即,保持第一个子窗口打开),步骤#4可以正常工作(即,第二个子窗口可以正常关闭)
步骤#2和步骤#3 的代码列表
function showSecondChildScreen(url, FirstChildWindow) {
....
var mainWindow = FirstChildWindow.opener;
FirstChildWindow.close();
var SecondChildScreen = mainWindow.open(url,'passWin','width=700,top=120,left=200,titlebar=yes,resizable=yes,scrollbars=yes');
....
}
编辑:一个小示例的代码清单,用于复制
1。主窗口的html页面
<!DOCTYPE html>
<html>
<head>
<title>
Popup Window Test
</title>
<script type="text/javascript">
function showFirstChildWindow() {
var pidWin = window.open("firstChild.html",'firstChild','width=600,height=475,screenX=200,screenY=300,top=220,left=200,titlebar=yes,resizable=yes');
if (pidWin != null) {
pidWin.focus();
}
}
</script>
</head>
<body>
<p>
<b>Main Window </b>
</p>
<a href="javascript:void(0)" onclick="showFirstChildWindow();" > Nurse Patti </a>
</body>
</html>
第一个子窗口的html页面
<!DOCTYPE html> <html> <head> <title> First child </title> <script type="text/javascript"> function showSecondChildScreen(url, FirstChildWindow) { var mainWindow = FirstChildWindow.opener; FirstChildWindow.close(); var SecondChildScreen = mainWindow.open(url,'passWin','width=700,top=120,left=200,titlebar=yes,resizable=yes,scrollbars=yes'); if (SecondChildScreen != null) { SecondChildScreen.focus(); } } </script> </head> <body> <p> <b>First Child Popup Window </b> </p>
第二个子窗口的html页面
<!DOCTYPE html> <html> <head> <title> Second child </title> <script type="text/javascript"> function doClose() { window.close(); } </script> </head> <body> <p> <b>Second Child Popup Window </b> </p> <input type="button" value="Close" onclick="doClose();" /> </body> </html>
复制步骤(我还关闭了Edge中的"弹出窗口阻止程序",使测试更容易):
请将以上3个html放在同一文件夹下
第一个html页面是主窗口。请使用边缘浏览器打开
点击"Patti护士"将弹出第一个儿童弹出窗口
最终用户点击第一个孩子弹出窗口中的"第二个孩子"按钮。然后第一个弹出窗口关闭。第二个子弹出窗口打开
单击第二个弹出窗口中的"关闭"按钮或浏览器提供的X按钮。它可能会正确关闭,也可能不会正确关闭。有时这个第二个孩子变成了一个空白的孩子,只有"任务管理员"才能杀死它
我们最终采用了一种不同的方法——将那些物理弹出窗口重写为jQuery弹出窗口。感谢所有在这里提供帮助的人。