Javascript,确定哪个窗口是打开的,window.open

时间:2015-01-21 04:21:22

标签: javascript window.open

点击后,我用window.open打开多个窗口。 我想知道,10秒后,哪个窗口仍然打开。 有没有办法唯一地识别我刚刚打开的窗口?

我使用下面的代码,但是如果我打开一个窗口,关闭它,然后打开另一个窗口,代码将抛出警告“窗口仍然打开”两次。 我理解为什么,但有一种简单的方法可以识别窗口,所以我可以检查var_win.closed是否为我想要的窗口,而不是最后一个打开的窗口?

<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
})
})

1 个答案:

答案 0 :(得分:0)

不,你不能。如果我理解正确,您想要检测用户是否说例如转到Yahoo!或Facebook(与您自己分开的网站),如果他们决定关闭该窗口,然后做一些事情或从中获取一些信息。

也许如果链接转到您拥有的网站,您可以在这些特定网站上添加一些逻辑,以便在使用eventListener unloadalthough even this isn't 100% reliable)关闭时发送请求,但如果它们是网站在你无法控制的情况下,你没有太多方法可以获得这些信息。如果您可以在自己的网站上检测到某人在其他网页上的互动,则会出现一些严重的安全问题。

一个hacky替代方案,如果说你在模态中显示这些网站是(我猜)你可以在用户将导航到的网站的模式中显示iFrame。这不是一个新标签,甚至不是他们浏览器中的新窗口 - 相反,这将是您在网站中创建的模式,因此您可以完全控制。这不仅仅是一个简单的window.open,而且还需要更多的工作。