【问题标题】:How do I make sure that an automatically closed window closes all its spawned windows as well?如何确保自动关闭的窗口也关闭所有生成的窗口?
【发布时间】:2010-12-16 02:36:48
【问题描述】:

我有以下场景:

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

但有时会发生以下情况

  1. 我们客户网站上的用户单击链接,使用他们的凭据自动登录到我们的网站,然后在新窗口中启动。
  2. 在我们的应用程序中,他们点击“帮助”链接,此时这是另一个弹出窗口。
  3. 他们有时会退出我们的应用程序,这会关闭该窗口。
  4. 帮助窗口仍然打开。
  5. 用户单击帮助窗口中的链接。
  6. 不再登录的用户现在转到该帮助窗口中的登录屏幕。
  7. 集体歇斯底里!

所以我想做的是确保在关闭原始窗口时,它也会关闭它产生的所有弹出窗口。我认为这可以在 JavaScript 中完成,但如何?

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

【问题讨论】:

    标签: javascript login popup


    【解决方案1】:
    <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>
    

    【讨论】:

      【解决方案2】:

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

      拥有一个纯粹执行window.close() 的页面。

      如果您要执行普通的window.close(),请确保您为每个弹出窗口执行window.open("our close page", windowNameIStored)

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

      【讨论】:

        【解决方案3】:

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

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

        每次我被要求做一个弹出窗口时,我只是盯着提出请求的人,好像他们在说其他语言,然后问是不是 1998 年。弹出窗口是一种或多种的结果以下:糟糕的用户界面设计,无知的经理,和/或马虎/懒惰的开发。虽然我确信还有其他原因。

        只要我的 2 美分。

        【讨论】:

        • 在这种情况下,弹出窗口是有意义的——至少当用户通过自动登录访问我们的站点时。他们不想离开他们原来的会话,也只是登录到我们的会话中。这也不是问题的答案,作为评论会更好,仅供参考
        • 我部分同意...如果最终用户在外部网之类的地方,可能适合为外部网之外的东西打开一个新窗口。将弹出窗口用于“帮助”部分之类的内容,他描述的是我所说的不好。
        • paulj - 您如何在不使用弹出窗口的情况下显示“帮助”部分?最终用户可能需要他们正在查看的页面上的某些内容的帮助,在这种情况下,显示帮助的弹出窗口可能很有用,因为他们不会丢失他们在主页上可能正在处理的任何内容。
        • David -- 最简单的是,我会使用一个 DIV,它可以放置在用户填写的元素上方或附近。数据可以轻松地异步加载。还有其他解决方案。我不是 UX 设计师,我只是告诉他们他们不能有弹出窗口。
        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 2021-04-08
        • 2014-06-20
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        相关资源
        最近更新 更多