13

我想使用 javascript 在我的网站上为银行付款打开一个新选项卡,并且不离开主窗口,

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

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

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

提前致谢

4

3 回答 3

27

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

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

另请参阅这个简短的演示

有关更多信息window.open()和最佳实践,请查看MDN

于 2013-06-18T15:03:35.913 回答
5

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

父代码

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();
}
于 2021-01-09T16:22:40.850 回答
3

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

于 2013-06-18T14:33:14.627 回答