5

我正在为一些成员从我的站点打开一个新的浏览器窗口。但是,有些人可能稍后会关闭它,或者它最初可能无法打开。

是否有一段相当简单的 Javascript 可以在每个页面上运行,以确认是否打开了另一个浏览器窗口,如果没有,提供重新打开它的链接?

[澄清:]检查窗口是否打开的代码将在其他页面上运行 - 而不仅仅是在打开它的同一个窗口和 URL 中。想象一个用户登录,窗口(试图)打开,然后他们在同一个选项卡/窗口(或其他)中浏览一段时间,然后关闭第二个窗口(或它从未打开) - 我希望能够注意到窗口在最初尝试打开/关闭后的一段时间后已经关闭,所以我不确定是否可以轻松使用或确实可能.

4

3 回答 3

4

这篇优秀的综合文章 (“几乎完全控制弹出窗口”)应该回答您关于 javascript 弹出窗口的所有问题。

“JavaScript 1.1 还引入了 window closed属性。使用此属性,可以检测窗口是否已打开并随后关闭。如果它仍然为 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');

我想在您的情况下,您应该考虑一种一致的方法来在整个应用程序中创建弹出窗口的所有名称。

于 2008-10-21T11:00:02.327 回答
1
var myWin = window.open(...);

if (myWin.closed)
{
    myWin = window.open(...);
}
于 2008-10-21T10:48:14.487 回答
0

没有通用的方法来检查它,因为每个弹出窗口阻止程序都有不同的行为。例如,Opera 不会显示弹出窗口,但 widow.closed 将返回 false,因为在幕后 Opera 会保留被阻止窗口的影子副本,以防用户无论如何都想看到它。

于 2008-10-21T12:58:34.817 回答