在Edge浏览器

时间:2016-06-08 15:31:53

标签: javascript popup microsoft-edge

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

  1. 当最终用户点击主窗口中的链接时,主窗口打开第一个子窗口(Javascript window.open
  2. 然后,当最终用户点击第一个子窗口中的按钮时,JS将关闭此第一个子窗口。
  3. 然后JS代码的主窗口通过JS代码(1st_child_window.opener.open
  4. 打开第二个子窗口
  5. 如果最终用户尝试关闭此第二个子窗口(调用JS window.close或浏览器提供的按钮 - “X”按钮),它会间歇性地工作。很多时候它无法关闭并保持为空白弹出窗口。然后它只能被“任务管理器”杀死
  6. 如果步骤#2被注释掉(即,打开第一个子窗口),则步骤#4可以正常工作(即第二个子窗口可以正常关闭)
  7. 步骤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>
      
    3. 重现的步骤(我还关闭了Edge中的“弹出窗口拦截器”以使测试更容易):

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

      2. 第一个html页面是主窗口。请使用Edge浏览器

      3. 打开它
      4. 点击“护士帕蒂”将弹出第一个子弹出窗口

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

      6. 在第二个弹出窗口中单击“关闭”按钮或浏览器提供的X按钮。它可能会也可能不会正常关闭。有时这第二个孩子变成空白,只有“任务经理”可以杀死它。

1 个答案:

答案 0 :(得分:0)

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