Javascript打开新标签,等待它关闭

时间:2013-06-18 14:30:26

标签: javascript

我想在我的网站上使用javascript打开一个新的银行支付标签,并且没有主窗口导航,

当用户从银行支付回到返回URL时,我想从另一个窗口(如果可能)检测到返回URL的回复,或者只是通知主窗口该事务已完成且它应该检查数据库是否有更新。

我在几个网站上看到过这种行为,例如加载会话的popup->login->popup closes->main window reloads,问题是我不知道这个方法叫什么,所以我不知道我的关键字是什么我正在寻找。

我真正需要的是这个方法的名称,或者它是如何完成的(作为javascript中的某个关键字或其他东西)

提前致谢

3 个答案:

答案 0 :(得分:11)

您可以使用window.open打开新页面,然后定期检查窗口是否已关闭。 window.open会返回对已打开窗口的引用,您可以使用windowHandle.closed检查它是否已关闭。

btn.onclick = function() {
    var win = window.open(
        "http://www.stackoverflow.com", 
        "Secure Payment");
    var timer = setInterval(function() {
        if (win.closed) {
            clearInterval(timer);
            alert("'Secure Payment' window closed !");
        }
    }, 500);
}

另请参阅此 short demo

有关window.open和最佳做法的详情,请查看 MDN

答案 1 :(得分:4)

从我发现的子窗口传输数据的最佳方法。

父代码

window.open(url);
await new Promise(resolve => window.addEventListener('custom', resolve));

子代码

if(window.opener) {
  const customEvent = new CustomEvent('custom', { detail: {} });
  window.opener.dispatchEvent(customEvent);
  window.close();
}

答案 2 :(得分:2)

在关闭弹出窗口之前,请尝试opener.someFunction()在打开它的窗口中调用一个函数。请注意,如果用户关闭了第一个窗口,或者用户将其导航到另一个站点,或者两个窗口因任何原因位于不同的域中,则会失败。