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

popup window close issue in case of multiple popups in Edge browser

此问题仅发生在 Edge 中,但在 IE11 和 Chrome 中有效。有办法解决这个问题吗?

  1. 主 window 打开第一个 child window (Javascript window.open 当最终用户在主 window)
  2. 然后当最终用户点击第一个childwindow中的按钮时,JS会关闭这个第一个childwindow.
  3. 然后 JS 代码主要 window 通过 JS 代码打开第二个 child window (1st_child_window.opener.open)
  4. 如果最终用户尝试关闭第二个 child window(调用 JS window.close 或 browser-provided-“X”-按钮的按钮),它会间歇性地工作.很多时候它无法关闭并保持为空白弹出 window 。然后它只能被“任务管理器”杀死
  5. 如果步骤 #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>
  1. 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>
    

  2. 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" 以使测试更容易):

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

  2. 第 1 html 页是主页 window。请用Edge浏览器打开

  3. 单击“护士帕蒂”将弹出第一个 child 弹出窗口 window

  4. 最终用户单击第一个 child 弹出窗口中的“第二个 child” 按钮 window。然后第一个弹出窗口关闭。第二个 child 弹出窗口打开

  5. 单击“关闭”按钮或在第二个弹出窗口中单击 browser-provided-X 按钮。它可能会或可能不会正确关闭。有时这个2nd child 变成空白,只有“任务管理器”才能杀死它。

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