【问题标题】:How to capture the event when my javascript opened window is closed当我的javascript打开窗口关闭时如何捕获事件
【发布时间】:2013-01-05 15:46:24
【问题描述】:

情况是这样的。使用 JavaScript,我打开一个窗口,其中包含我的域上显示加载指示器的 URL。

大约一秒钟后,窗口的 URL 更改为 PayPal 窗口(因此是其他域)。我希望能够在用户关闭贝宝窗口时捕获事件,这样我就可以将用户重定向到正确的页面,说明支付失败。

我遇到了window.onbeforeunload,但是当 url 更改为 PayPal 时会触发它,但之后关闭窗口时不会触发。我该如何解决这个问题?

所以,这似乎不起作用,我在这里找不到任何其他答案:

    ppwin = window.open('paypal/loading.php', 'paypal_popup', 'width=900,height=500');
    ppwin.onbeforeunload = function(){
        //triggered when URL changes
        if (ppwin.closed) // false because window is still open.
            // Order failed
    }

即使我接受了答案,我仍然不满意。它有效,但仅此而已。如果有人提供更好的答案,我会更高兴!

【问题讨论】:

    标签: javascript events cross-browser window


    【解决方案1】:

    我遇到了同样的问题,最后我所做的是定期创建父窗口检查弹出窗口是否关闭。任何替代解决方案都让我抓狂。

    代码可能是这样的:

    // Create popup window
    var popup = window.open('http://www.google.com');
    
    // Set interval to check if it has been closed
    var windowCheckInterval = setInterval(function() { windowCheck(); }, 300);
    
    // Check function
    function windowCheck() {
        if (!popup || popup.closed) {
            clearInterval(windowCheckInterval);
    
            // Do something
        }
    }
    

    尽管这是一个相当粗鲁的解决方案,但用户体验非常好,编程也非常简单。

    当进程以不同的方式完成时(不仅仅是在窗口关闭时),你必须记住清除间隔,它是有的。

    【讨论】:

    • 好吧,我也想过这个,但我不是很喜欢。 “任何替代解决方案都让我发疯。”。有什么选择?
    • 我试过popup.onclosepopup.onunload,......但没有一个奏效。此外,您无法控制弹出窗口的行为,因为它不是您的代码(您提到那里打开了 PayPal)。也许有比设置间隔更好的解决方案,但我不知道。 :-(
    • 谢谢。这“看起来”很老套,但它确实可以完美运行。荣誉。
    【解决方案2】:

    Capture the close event of popup window in JavaScript

    只要弹窗 url 与父级在同一个域中,就可以捕获它。 否则尝试“你能做的最好的就是在你的域中打开一个文档,然后在 iframe 中加载远程 URL,或者通过服务器脚本读取它并从那里呈现它。”

    【讨论】:

    • 我已经说过它不是同一个域。因此,您的答案仍然无用
    • 你可以说它没用,因为它不能解决你的问题。但是,如果您的问题是在特定工具/环境中无法完成的事情。然后回答它不能完成,是一个正确的答案。也许接受浏览器行为中的安全限制将是一个适当的解决方案。否则,您会一直等待并寻找不存在的解决方案;
    • 重点是,你用一个自相矛盾的答案来回答一个问题。我说不是同一个域,你给一个同域的答案。
    猜你喜欢
    • 2010-11-25
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多