Javascript window.open创建对基于名称的

Javascript window.open创建对基于名称的,javascript,Javascript,通过这种方式,我获得对打开窗口的引用: var refWin = window.open("mypage1", "name_mypage"); 如果要关闭窗口,我将使用以下选项关闭: refWin.close(); 如果我执行屏幕刷新(F5)并运行同一行,它将在同一窗口中打开,因为我输入了相同的名称 var refWin = window.open("mypage2", "name_mypage"); 但引用不同(refWin) 问题:如何根据名称引用窗口?在打开窗口之前,我需要用相同的名

通过这种方式,我获得对打开窗口的引用:

var refWin = window.open("mypage1", "name_mypage");
如果要关闭窗口,我将使用以下选项关闭:

refWin.close();
如果我执行屏幕刷新(F5)并运行同一行,它将在同一窗口中打开,因为我输入了相同的名称

var refWin = window.open("mypage2", "name_mypage");
但引用不同(refWin)

问题:如何根据名称引用窗口?在打开窗口之前,我需要用相同的名称关闭窗口

var refWin = window.open("mypage2", "name_mypage");
做一些类似于:

var refWin = window.open("about:blank", "name_mypage");
refWin.close();
refWin = window.open("mypage2", "name_mypage");
但不必是一个空白的参考窗口


谢谢

根据andres的评论,以下是他正在寻找的解决方案:

refWin.location = "myurl";
refWin.focus();
这将在窗口中打开“myurl”,并对其进行聚焦

或者

编辑:

如果您不想再次重新加载页面,那么没有任何理由不能这样做:

var refWin = window.open("mypage1", "name_mypage");
refWin.close();
refWin = window.open("mypage1", "name_mypage");
如果您真的关心它,您可以制作自己的“windows”对象:


我认为这不是非常有效,因为您仍然无法可靠地集中精力,但它可能适合您的使用。

我的解决方案基于另一个脚本:

Helper.window = new function () {

    // Private fields
    var w = window, s = screen, _self = this, whs = {}, isChrome = /chrome/.test(navigator.userAgent.toLowerCase());

    // Public Members
    this.focus = function (wh) {
        if (!wh) return;
        if (isChrome) wh.blur();
        wh.focus();
    };

    this.windowExists = function (wt) {
        return wt && whs[wt] && (typeof whs[wt]['closed'] != undefined) && !whs[wt].closed;
    };

    this.close = function (wt) {

        if (typeof whs[wt][close] != undefined) whs[wt].close();
        whs[wt] = null;

        return _self;
    };

    this.properties = function (wp) {

        wp = (wp || 'menubar=yes').toLowerCase();

        if (!(/menubar/.test(wp)))
            wp += 'menubar=yes';

        if (!(/location/.test(wp)))
            wp += ',location=yes';

        if (!(/width/.test(wp)))
            wp += ',width=' + (s.availWidth - 150);

        if (!(/height/.test(wp)))
            wp += ',height=' + (s.availHeight - 150);

        if (!(/scrollbars/.test(wp)))
            wp += ',scrollbars=yes';

        if (!(/resizable/.test(wp)))
            wp += ',resizable=yes';

        return wp;
    };

    this.open = function (url, wt, wp) {

        if (_self.windowExists(wt))
            return _self.close(wt).open(url, wt, wp);

        var urlOpen = '';
        if (typeof url == 'string') {
            urlOpen = url;
        } else if (jQuery(url).get(0).tagName.toLowerCase() == 'a') {
            urlOpen = jQuery(url).attr('href');
        } else {
            urlOpen = 'about:blank';
        }

        wp = _self.properties(wp);
        wt = wt || "_blank";

        var wh = wp ? w.open(urlOpen, wt, wp) : w.open(urlOpen, wt);

        if (wh && "_blank" !== wt) {
            whs[wt] = wh;
            _self.focus(wh);
        }

        return wh;
    };

};  

如果我理解正确,您希望能够打开一个窗口,刷新页面(F5),然后关闭窗口。对吗?但为什么要关闭并重新打开它?您可以在不关闭的情况下调整/更改位置it@Ryan基纳尔,我需要在同一个窗口中打开一个新页面(或图像)并聚焦。如果我打开一个同名网站,请更改网站,但不要将焦点放在窗口上。因此,我们需要关闭窗口。但宁愿不打开新窗口,也只需关闭。因为打开一个新窗口可以引用相同的名称,所以我想这样做,但只关闭它。“refWin.focus();”(windows)只会使窗口闪烁,但如果它是openHmm,则不会强制将焦点聚焦在该窗口上。我想知道这是否与Windows设置有关。在我的机器上,它会使窗口获得焦点(Windows XP SP3)。有什么原因不能再次调用window.open()吗?请参见编辑。
Helper.window = new function () {

    // Private fields
    var w = window, s = screen, _self = this, whs = {}, isChrome = /chrome/.test(navigator.userAgent.toLowerCase());

    // Public Members
    this.focus = function (wh) {
        if (!wh) return;
        if (isChrome) wh.blur();
        wh.focus();
    };

    this.windowExists = function (wt) {
        return wt && whs[wt] && (typeof whs[wt]['closed'] != undefined) && !whs[wt].closed;
    };

    this.close = function (wt) {

        if (typeof whs[wt][close] != undefined) whs[wt].close();
        whs[wt] = null;

        return _self;
    };

    this.properties = function (wp) {

        wp = (wp || 'menubar=yes').toLowerCase();

        if (!(/menubar/.test(wp)))
            wp += 'menubar=yes';

        if (!(/location/.test(wp)))
            wp += ',location=yes';

        if (!(/width/.test(wp)))
            wp += ',width=' + (s.availWidth - 150);

        if (!(/height/.test(wp)))
            wp += ',height=' + (s.availHeight - 150);

        if (!(/scrollbars/.test(wp)))
            wp += ',scrollbars=yes';

        if (!(/resizable/.test(wp)))
            wp += ',resizable=yes';

        return wp;
    };

    this.open = function (url, wt, wp) {

        if (_self.windowExists(wt))
            return _self.close(wt).open(url, wt, wp);

        var urlOpen = '';
        if (typeof url == 'string') {
            urlOpen = url;
        } else if (jQuery(url).get(0).tagName.toLowerCase() == 'a') {
            urlOpen = jQuery(url).attr('href');
        } else {
            urlOpen = 'about:blank';
        }

        wp = _self.properties(wp);
        wt = wt || "_blank";

        var wh = wp ? w.open(urlOpen, wt, wp) : w.open(urlOpen, wt);

        if (wh && "_blank" !== wt) {
            whs[wt] = wh;
            _self.focus(wh);
        }

        return wh;
    };

};