代码之家  ›  专栏  ›  技术社区  ›  Tom Kidd

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

  •  0
  • Tom Kidd  · 技术社区  · 15 年前

    我有以下情况:

    1. 我们网站上的用户注销,并被发送到一个执行JavaScript的页面 window.close() ,关闭窗口。如果他们是直接登录到我们网站的客户,那么他们将返回登录页面,但是自动登录后,他们对登录页面没有任何用处,因此自动关闭页面更好。

    1. 我们客户网站上的用户单击链接,使用其凭据自动登录到我们的网站,该网站将在新窗口中启动。
    2. 在我们的应用程序中,他们单击“帮助”链接,此时是另一个弹出窗口。
    3. 在某个时候,他们会注销我们的应用程序,从而关闭该窗口。
    4. 用户单击“帮助”窗口中的链接。
    5. 用户不再登录,现在进入帮助窗口中的登录屏幕。
    6. 集体歇斯底里!

    所以我想做的是确保当原始窗口关闭时,它也会关闭它生成的任何弹出窗口。我想这可以在JavaScript中实现,但如何实现呢?

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

    3 回复  |  直到 15 年前
        1
  •  2
  •   vsr    15 年前
    <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
  •  1
  •   Alex    4 年前

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

    window.close() .

    你什么时候会做一个正常的 window.close() window.open("our close page", windowNameIStored) 对于每个弹出窗口。

    这是我向我们的一个供应商提交的下游修复程序,效果非常好。

        3
  •  0
  •   Paul J Paul Brit    15 年前

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

    说真的,尽管所有内置的浏览器功能和第三方应用程序都阻止了它们,但它们已经变得非常不可靠了。你100%确定弹出窗口打开了吗?您必须进行测试以确保,但可能第三方应用程序在您的测试完成后关闭了它,谁知道呢,所以现在客户的体验不好。如果他们真的付钱给客户,你的客户可能会赔钱。当然,你可以放一条信息,上面写着“关掉你的弹出窗口拦截器”,但老实说,到底有多少用户知道该怎么做呢?

    每次我被要求做一个弹出窗口,我只是盯着请求它的人,就像他们在说其他语言一样,然后问是否是1998年。弹出窗口是以下一个或多个原因造成的:糟糕的用户界面设计、无知的管理者和/或草率/懒惰的开发。虽然我相信还有其他原因。

    就我的2美分。