【问题标题】:How do I confirm a browser window is open, with Javascript?如何使用 Javascript 确认浏览器窗口已打开?
【发布时间】:2008-10-21 10:45:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript popup


    【解决方案1】:

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

    "JavaScript 1.1 还引入了窗口 close 属性。使用此属性,可以检测窗口是否已打开并随后关闭。我们可以使用它来加载页面如果它仍然为启用 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');
    

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

    【讨论】:

      【解决方案2】:
      var myWin = window.open(...);
      
      if (myWin.closed)
      {
          myWin = window.open(...);
      }
      

      【讨论】:

      • “myWin”变量可用多长时间?就在同一页上?
      • @Topbit:是的,但是您可以通过引用弹出窗口的名称来获取窗口句柄:window_handle = window.open(page,'myPopupName'); -- 我真的建议阅读我的答案 (splattne) 中的链接文章。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多