如何在我的javascript打开窗口关闭时捕获事件

时间:2013-01-22 12:02:16

标签: javascript events cross-browser window

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

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

我遇到了window.onbeforeunload,但是当网址更改为PayPal时会触发一个,但在此之后关闭窗口时则不会触发。{p}我如何克服这个问题?

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

    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
    }

即使我接受了答案,我仍然不满意。它有效,但就是这样。如果有人提供了更好的答案,我会更开心!

2 个答案:

答案 0 :(得分:2)

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

代码可能是这样的:

// 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
    }
}

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

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

答案 1 :(得分:0)

请参阅Capture the close event of popup window in JavaScript

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