首页 > 解决方案 > Angular 8 beforeunload 事件事件在关闭选项卡上不起作用

问题描述

嘿,我尝试在关闭选项卡上发出 http 请求,但它不起作用,但如果我导航到其他组件,它的工作。我尝试像这篇文章Angular 2 - Execute code when closing window那样更改函数

但它现在对我有用。

我的http服务:

  removeCurrentEditor(reportID) {
    return this.http.request('GET', this.baseUrl + this.REPORTS_API + '/' + this.REMOVE_CURRENT_EDITOR
     + '/' + reportID, {responseType: 'json'});
  }

我的组件:

 // Handle close tab
  @HostListener('window:beforeunload', ['$event'])
  beforeUnloadHander(event) {
    this.reportService.removeCurrentEditor(this.reportID);
  }

谢谢 !

标签: angular

解决方案


我们的应用程序遇到了类似的问题,我们必须在关闭浏览器选项卡时发出 http 调用。问题是当浏览器关闭时,它会取消所有 xhr 调用。因此没有办法实现这一点,并且 angular 不支持开箱即用的同步 http 调用。

最后,我们最终在 onBeforeUnload 事件中使用了同步 xm​​lhttprequest。这样,浏览器在关闭浏览器之前等待调用完成。

XMLHttpRequest.open(method, url[, async[, user[, password]]])

如果设置为 false,则 async 参数表示同步请求。

您可以探索的另一个选项是类似于心跳客户端的东西,它可以检测应用程序是否打开。如果不是,服务器可以执行该逻辑。


推荐阅读