javascript从另一个窗口关闭窗口会覆盖调用窗口名

javascript从另一个窗口关闭窗口会覆盖调用窗口名,javascript,popupwindow,window.open,Javascript,Popupwindow,Window.open,我有一个网站打开了几个新的选项卡/窗口。在网站主页上,有一个“全部关闭”按钮,该按钮应关闭从网站打开的所有窗口。乍一看,它似乎运作良好。但是,按“全部关闭”链接时打开的最后一页会覆盖主页的名称。这样做的结果是,无论何时再次调用最后打开的页面,它都不会在新选项卡中打开,而是在主页选项卡中打开(这显然不是我想要的) 见本mwe: popupmanager.js: function PopupManager() { this.name = "_popupmanager_"; this.

我有一个网站打开了几个新的选项卡/窗口。在网站主页上,有一个“全部关闭”按钮,该按钮应关闭从网站打开的所有窗口。乍一看,它似乎运作良好。但是,按“全部关闭”链接时打开的最后一页会覆盖主页的名称。这样做的结果是,无论何时再次调用最后打开的页面,它都不会在新选项卡中打开,而是在主页选项卡中打开(这显然不是我想要的)

见本mwe:

popupmanager.js:

function PopupManager() {
    this.name = "_popupmanager_";
    this.windows = {};
};

PopupManager.prototype.open = function(url, name) {
    this.windows[name] = window.open(url, name);
    this.windows[name].focus();
};

PopupManager.prototype.closeAll = function() {
    for (name in this.windows) {
        this.closeWindow(name);
    }
};

PopupManager.prototype.closeWindow = function(name) {
    if (this.windows[name]) {
        this.windows[name].close();
        delete this.windows[name];
    }
};
正在创建index.html的主页:

<!doctype html>

<html>
<head>
    <script src="./popupmanager.js"></script>
    <script>
        var popupManager = new PopupManager();
    </script>
</head>
<body>
    <ul>
        <li><a href="javascript:popupManager.open('http://www.facebook.be', 'facebook')">facebook</a></li>
        <li><a href="javascript:popupManager.open('http://www.google.be', 'google')">google</a></li>
        <li><a href="javascript:popupManager.closeAll()">close all/a></li>
    </ul>
</body>
</html>

var popupManager=新的popupManager();
  • 全部关闭/a>
现在,当您单击第一个链接而不是第二个链接时,两个页面都会打开。如果按“全部关闭”,一切似乎都正常。但是,此时,主页选项卡的名称为“google”(由于函数“closeAll”的执行)。如果再次单击第二个链接,它将在主页面中打开,而不是在新选项卡中打开。我在Firefox21.0、Google Chrome 24.0.1312.60m和IE9中看到了这种行为,所以我认为这是javascript的预期行为


我只是不明白为什么主页的名称会被覆盖和/或如何使脚本不覆盖主页选项卡的名称。有人吗?

好吧,我自己解决了。我一直在对“closeWindow”(关闭窗口)函数进行微调,这就成功了:

PopupManager.prototype.closeWindow = function(name) {
    if (this.windows[name]) {
        if (!this.windows[name].closed) {
            this.windows[name].opener.name="indexpage";
            this.windows[name].close();
        }
        delete this.windows[name];
    }
};