angular - 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);
}
谢谢 !
解决方案
我们的应用程序遇到了类似的问题,我们必须在关闭浏览器选项卡时发出 http 调用。问题是当浏览器关闭时,它会取消所有 xhr 调用。因此没有办法实现这一点,并且 angular 不支持开箱即用的同步 http 调用。
最后,我们最终在 onBeforeUnload 事件中使用了同步 xmlhttprequest。这样,浏览器在关闭浏览器之前等待调用完成。
XMLHttpRequest.open(method, url[, async[, user[, password]]])
如果设置为 false,则 async 参数表示同步请求。
您可以探索的另一个选项是类似于心跳客户端的东西,它可以检测应用程序是否打开。如果不是,服务器可以执行该逻辑。
推荐阅读
- mysql - 无法将外部 MySQL 数据库配置到 Owncloud?
- odoo - 如何根据条件创建动态选择字段?
- vba - 具有访问权限的打印报告生成白色方块
- docker - docker 容器中的 Nifi 实例无法启动
- azure - Azure 资源列表未显示
- angular - 在角度 4 中基于 *ngIf 调用不同的函数
- ansible - 循环访问 Ansible 中的字典列表时访问键
- javascript - google.setOnLoadCallback with parameter inside jquery ajax success function
- ios - UICollectionViewCell 中的图像被另一个单元格中的图像替换
- swift - Swift compile error: 'case' label can only appear inside a 'switch' statement?