Javascript,确定哪个 window 已打开,window.open

Javascript, identifying which window was open, window.open

我正在点击打开多个 windows 和 window.open。 我想知道,10 秒后,哪个 window 仍然打开。 有没有办法唯一标识我刚打开的 window?

我使用下面的代码,但是如果我打开一个 window,关闭它,然后再打开另一个,代码将抛出警报 "window still open" 两次。 我明白为什么,但是有没有一种简单的方法来识别 window,所以我可以检查 var_win.closed 我想要的 window,而不是最后打开的那个?

<div class="get_link" data-url="http://www.yahoo.com">Window 1</div>
<div class="get_link" data-url="http://www.yahoo.com">Window 2</div>
<div class="get_link" data-url="http://www.google.com">Window 3</div>
<div class="get_link" data-url="http://www.space.com">Window 4</div>        

Javascript:

jQuery(document).ready(function(e) {
e( "body" ).on( "click", ".get_link", function(t) {
    t.preventDefault();

    var n = e(this);
    var u = n.data("url");

    var_win=window.open(u);

    function checkwindow(){
        if (!var_win.closed)
                alert( "window still open");
        else 
                alert ("window closed");
    }
    setTimeout(checkwindow, 10000);
    return false
})
})

不,你不能。如果我理解正确,您想检测用户是否说例如去 Yahoo!或 Facebook(一个独立于您自己的网站),如果他们决定关闭该网站 window,请采取行动或从中获取一些信息。

也许如果链接指向您拥有的网站,您可以在这些特定网站上添加一些逻辑,以便在它们被 eventListener unload (although even this isn't 100% reliable) 关闭时发送请求,但是如果它们是您无法控制的站点,那么您获取该信息的方式并不多。如果您可以检测到某人在您自己网站的其他页面上的互动,就会出现一些严重的安全问题。

如果说您要以模态显示这些网站,那么一个骇人听闻的替代方案是(我猜)您可以在用户将导航到的网站的模态中显示 iFrame。这不会是他们浏览器中的新选项卡,甚至不会是新的 window——而是您在您的站点中创建的模式,因此您可以完全控制。这不仅仅是一个简单的 window.open,而且需要您做更多的工作。