1

情况是这样的。使用 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
    }

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

4

2 回答 2

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

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

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

于 2013-01-22T12:11:46.953 回答
0

请参阅在 JavaScript 中捕获弹出窗口的关闭事件

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

于 2013-01-22T12:48:49.723 回答