在Edge浏览器中出现多个弹出窗口时,弹出窗口关闭问题



此问题仅发生在Edge中,但适用于IE11和Chrome。有办法绕过这个吗?

  1. 主窗口打开第一个子窗口(当最终用户单击主窗口中的链接时为Javascriptwindow.open)
  2. 然后,当最终用户点击第一个子窗口中的按钮时,JS将关闭这个第一个子窗口
  3. 然后JS代码让主窗口通过JS代码(1st_child_window.opener.open)打开第二个子窗口
  4. 如果最终用户试图关闭这个第二个子窗口(调用JSwindow.close的按钮或浏览器提供的"X"按钮),它会间歇性工作。很多时候,它无法关闭,并保持为空白弹出窗口。它只能被"任务管理器"杀死
  5. 如果步骤#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>
第一个子窗口的
  1. 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>
    

  2. 第二个子窗口的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中的"弹出窗口阻止程序",使测试更容易):

  1. 请将以上3个html放在同一文件夹下

  2. 第一个html页面是主窗口。请使用边缘浏览器打开

  3. 点击"Patti护士"将弹出第一个儿童弹出窗口

  4. 最终用户点击第一个孩子弹出窗口中的"第二个孩子"按钮。然后第一个弹出窗口关闭。第二个子弹出窗口打开

  5. 单击第二个弹出窗口中的"关闭"按钮或浏览器提供的X按钮。它可能会正确关闭,也可能不会正确关闭。有时这个第二个孩子变成了一个空白的孩子,只有"任务管理员"才能杀死它

我们最终采用了一种不同的方法——将那些物理弹出窗口重写为jQuery弹出窗口。感谢所有在这里提供帮助的人。

最新更新