如何确保自动关闭的窗口也关闭所有衍生窗口?

时间:2009-11-12 22:59:20

标签: javascript login popup

我有以下情况:

  1. 我们客户网站上的用户点击链接。它使用他们的站点凭据自动登录,并在新窗口中启动。
  2. 我们网站上的用户注销,并发送到执行JavaScript window.close()的页面,该页面关闭窗口。如果他们是直接登录我们网站的客户,那么他们会回到登录页面,但是自动登录,他们没有使用登录页面,所以页面自动关闭更好。
  3. 但有时会发生以下情况

    1. 我们客户网站上的用户点击一个链接,使用他们的站点凭据自动登录,然后在新窗口中启动。
    2. 在我们的应用程序中,他们点击“帮助”链接,此时此链接是另一个弹出窗口。
    3. 在某些时候,他们会退出我们的应用程序,关闭该窗口。
    4. 帮助窗口仍处于打开状态。
    5. 用户点击帮助窗口中的链接。
    6. 用户现在不再登录了,现在进入该帮助窗口的登录界面。
    7. MASS HYSTERIA!
    8. 所以我想要做的是确保当原始窗口关闭时,它还会关闭它产生的任何弹出窗口。我认为这可以在JavaScript中完成,但是如何?

      ADDENDUM:以下建议很不错,但问题是当浏览器关闭时用户所在的页面不是产生弹出窗口的同一页面,因此页面的句柄都消失了。如何获取具有特定名称的弹出窗口的句柄?

3 个答案:

答案 0 :(得分:2)

<html>
<head>
<script>
var childwindows=new Array();
function openchild(){
    var childW=window.open('in.html');
    childwindows[childwindows.length]=childW;
}

function closewindow(){
    for(i in childwindows){
        if(childwindows[i] && !childwindows[i].closed)  {childwindows[i].closewindow();}
    }
    window.close();
}
</script>
</head>
<body>
<br/>
<a onclick="openchild();">open child window</a>
<br/><br/>
<a onclick="closewindow();">close me</a>
</body>
</html>

答案 1 :(得分:1)

跟踪用弹出窗口打开的窗口名称。

有一个纯粹做window.close()

的页面

当您执行常规window.close()时,请确保为每个弹出窗口执行window.open(“我们的关闭页面”,windowNameIStored)。

这是我向下游提交给我们的供应商并且效果很好的修复程序。

答案 2 :(得分:0)

停止使用弹出窗口,这不是1998年:)

说真的,尽管所有内置的浏览器功能和第三方应用程序也会阻止它们,但它们变得非常不可靠。你是否100%确定弹出窗口?你必须进行测试才能确定,但​​是也许第三方应用程序在测试完成后关闭它,谁知道,所以现在客户的体验很糟糕。如果他们真的付钱给客户,那么您的客户可能会亏钱。当然,你可以发一条消息说“关闭你的弹出窗口拦截器”,但老实说,有多少用户真的知道如何做到这一点?

每当我被要求弹出窗口时,我只是盯着那些请求它的人,就像他们说的是其他语言,然后问是否是1998年。弹出窗口是一个或多个的结果以下:糟糕的用户界面设计,无知的管理者和/或草率/懒惰的开发。虽然我确定还有其他原因。

只需2美分。