popup window 在 Edge 浏览器中出现多个弹出窗口时关闭问题
popup window close issue in case of multiple popups in Edge browser
此问题仅发生在 Edge 中,但在 IE11 和 Chrome 中有效。有办法解决这个问题吗?
- 主 window 打开第一个 child window (Javascript
window.open
当最终用户在主 window)
- 然后当最终用户点击第一个childwindow中的按钮时,JS会关闭这个第一个childwindow.
- 然后 JS 代码主要 window 通过 JS 代码打开第二个 child window (
1st_child_window.opener.open
)
- 如果最终用户尝试关闭第二个 child window(调用 JS
window.close
或 browser-provided-“X”-按钮的按钮),它会间歇性地工作.很多时候它无法关闭并保持为空白弹出 window 。然后它只能被“任务管理器”杀死
- 如果步骤 #2 被注释掉,(即让第一个 child window 打开,)步骤 #4 可以正常工作(即第二个 child window然后可以正常关闭)
步骤#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 主页面 window
<!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 第一页 child window
<!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 第二页 child window
<!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 中的 "popup blocker" 以使测试更容易):
请将以上3个html放在同一文件夹下
第 1 html 页是主页 window。请用Edge浏览器打开
单击“护士帕蒂”将弹出第一个 child 弹出窗口 window
最终用户单击第一个 child 弹出窗口中的“第二个 child” 按钮 window。然后第一个弹出窗口关闭。第二个 child 弹出窗口打开
单击“关闭”按钮或在第二个弹出窗口中单击 browser-provided-X 按钮。它可能会或可能不会正确关闭。有时这个2nd child 变成空白,只有“任务管理器”才能杀死它。
我们最终采用了一种不同的方法——将那些物理弹出窗口 windows 重写为 jQuery 弹出窗口。感谢所有在这里提供帮助的人。
此问题仅发生在 Edge 中,但在 IE11 和 Chrome 中有效。有办法解决这个问题吗?
- 主 window 打开第一个 child window (Javascript
window.open
当最终用户在主 window) - 然后当最终用户点击第一个childwindow中的按钮时,JS会关闭这个第一个childwindow.
- 然后 JS 代码主要 window 通过 JS 代码打开第二个 child window (
1st_child_window.opener.open
) - 如果最终用户尝试关闭第二个 child window(调用 JS
window.close
或 browser-provided-“X”-按钮的按钮),它会间歇性地工作.很多时候它无法关闭并保持为空白弹出 window 。然后它只能被“任务管理器”杀死 - 如果步骤 #2 被注释掉,(即让第一个 child window 打开,)步骤 #4 可以正常工作(即第二个 child window然后可以正常关闭)
步骤#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 主页面 window
<!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 第一页 child window
<!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 第二页 child window
<!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 中的 "popup blocker" 以使测试更容易):
请将以上3个html放在同一文件夹下
第 1 html 页是主页 window。请用Edge浏览器打开
单击“护士帕蒂”将弹出第一个 child 弹出窗口 window
最终用户单击第一个 child 弹出窗口中的“第二个 child” 按钮 window。然后第一个弹出窗口关闭。第二个 child 弹出窗口打开
单击“关闭”按钮或在第二个弹出窗口中单击 browser-provided-X 按钮。它可能会或可能不会正确关闭。有时这个2nd child 变成空白,只有“任务管理器”才能杀死它。
我们最终采用了一种不同的方法——将那些物理弹出窗口 windows 重写为 jQuery 弹出窗口。感谢所有在这里提供帮助的人。