如何确认浏览器窗口已打开,并使用Javascript?

问题描述:

我从我的网站为一些成员打开一个新的浏览器窗口。然而,有些人稍后可能会关闭它,或者最初可能无法打开。如何确认浏览器窗口已打开,并使用Javascript?

是否有可能在每一页上运行,以确认是否另一个浏览器窗口是打开的,如果没有,则提供一个链接,重新打开它相当普通的JavaScript代码段?

[澄清:]要检查的代码是打开的窗口将在其他页面上运行 - 而不仅仅是在打开它的同一窗口和URL中。想象一下,用户登录后,窗口(试图)打开,然后他们在相同的标签页/窗口(或其他人)周围浏览一段时间,然后关闭第二个窗口(或从未打开过) - 我希望能够注意到/窗口已经关闭了一些时间在开放初期尝试之后它关闭后,所以我不知道检查从window.open()(与popup_window_handle.closed)的JavaScript的回报是很容易使用,或确实可能。

excellent, comprehensive article(“弹出窗口几乎完全控制”)应该回答你关于JavaScript的弹出窗口的所有问题。

“的JavaScript 1.1还引入了窗口关闭属性。使用此属性,它是可能的,如果一个窗口已经打开,随后关闭检测,我们可以用它来直接加载页面到开门红窗口,如果它仍然开放为JavaScript 1.1功能的浏览器:”

<script language="JavaScript"><!-- 
function open_main(page) { 
    window_handle = window.open(page,'main'); 
    return false; 
} 
//--></script> 

<script language="JavaScript1.1"><!-- 
function open_main(page) { 
    if (opener && !opener.closed) { 
     opener.location.href = page; 
    } 
    else { 
     window_handle = window.open(page,'main'); 
    } 
    return false; 
} 
//--></script> 

<a href="example.htm" onClick="return open_main('example.htm')">example.htm</a> 

增加: 你可以得到窗口参考弹出的名字这样处理早在另一页:

window_handle = window.open(page,'myPopupName'); 

我猜你的情况,你应该想想一个一致的方式在整个应用程序中创建的弹出窗口的所有名称。

var myWin = window.open(...); 

if (myWin.closed) 
{ 
    myWin = window.open(...); 
} 
+0

多久会的“myWin”变量可用?只是在同一页面上? – 2008-10-21 12:21:26

还有就是要检查它的每一个弹出窗口阻止程序具有不同的行为没有统一的办法。例如,Opera不会显示弹出窗口,但widow.closed会在场景后面返回false。Opera保留被阻止窗口的影子副本,以防万一用户想要看到它。