我正在从我的网站为一些成员打开一个新的浏览器窗口。但是,有些人可能会稍后将其关闭,或者最初可能无法打开。
是否有一个相当简单的Javascript片段可以在每个页面上运行以确认是否有另一个浏览器窗口是打开的,如果没有,提供一个链接来重新打开它?
[澄清:] 要检查的代码是打开的窗口将在其他页面上运行 - 而不仅仅是在打开它的同一窗口和URL中。想象一下,用户登录,窗口(尝试)打开,然后他们在相同的选项卡/窗口(或其他)中浏览一段时间,然后关闭第二个窗口(或者它从未打开) - 我希望能够注意窗口在初次尝试打开后/关闭后的一段时间内已经关闭,所以我不确定从window.open()(使用popup_window_handle.closed)检查javascript的返回是否很容易使用,或者确实可能
答案 0 :(得分:4)
此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');
我想在你的情况下,你应该考虑在整个应用程序中创建弹出窗口的所有名称的一致方法。
答案 1 :(得分:1)
var myWin = window.open(...);
if (myWin.closed)
{
myWin = window.open(...);
}
答案 2 :(得分:0)
没有通用的方法来检查它,因为每个弹出窗口阻止程序都有不同的行为。例如,Opera不会显示弹出窗口,但是widow.closed将返回false,因为Opera会保留被阻止窗口的阴影副本,以防万一用户想要查看它。