首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript:如何在用户选择注销时关闭所有子窗口?

JavaScript:如何在用户选择注销时关闭所有子窗口?
EN

Stack Overflow用户
提问于 2015-05-28 18:20:21
回答 1查看 1.3K关注 0票数 2

要求:

  1. 所有打开的子窗口都需要在IE上的用户会话中保持打开,而不管用户操作如何,都会刷新浏览器窗口。
  2. 当用户单击注销操作时,关闭所有子窗口。

问题:

浏览器重新呈现窗口时,由于F5/刷新按钮或导航,无法在页面上保留子窗口句柄。

EN

回答 1

Stack Overflow用户

发布于 2015-05-28 18:20:21

解决方案:

  1. 以相同的名称打开每个子窗口。
  2. 将指定的窗口名保存在本地存储中,作为集合或数组中的项,或者保存在父window.name中,如果本地存储不可接受,这就是工作。

代码语言:javascript
运行
复制
//Open popup window "ChildWinName1" from here
window.open("SomeSite/SomeApp/SomePage", "ChildWinName1", "width=600, height=400");
localStorage.setItem("Key1", "ChildWinName1");

//Open popup window "ChildWinName1" from here
window.open("SomeSite/SomeApp/SomePage", "ChildWinName2", "width=600, height=400");
localStorage.setItem("Key2", "ChildWinName2");

  1. 在您的应用程序中创建一个空白页,其中只有脚本中的self.close方法。

页面: BlankClose

代码语言:javascript
运行
复制
<!DOCTYPE html>

<html>
<head>
    <title>IndexX</title>
    <script type="text/javascript">
        function Exit() {
            self.close();
        }
        this.Exit();
    </script>
</head>
<body>
    <div>
        Bye..............
    </div>
</body>
</html>

  1. 在注销时,迭代窗口名称的集合,对于每个窗口名请求空白页3。将关闭每个子窗口。

代码语言:javascript
运行
复制
function closeAllChildWindow() {
        var wins = localStorage.length
        for (var i = 1; i <= wins; i++) {
            var winName = localStorage.getItem("ChildWinName" + i.toString());
            if (winName != null) {
                window.open('/SomeSite/SomeApp/blankClose", "Home")', winName);
                localStorage.removeItem("ChildWinName" + i.toString())
            }
            else {
                if (localStorage.length > 0) wins++;
            }
        }
    }

备注:可以使用JSON对象来封装字符串集合,而不是在本地存储中有多个键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30514256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档