Javascript 角度6:尝试对浏览器关闭事件(在浏览器的卸载/卸载事件之前)进行同步调用(删除)

Javascript 角度6:尝试对浏览器关闭事件(在浏览器的卸载/卸载事件之前)进行同步调用(删除),javascript,angular,typescript,synchronous,browser-close,Javascript,Angular,Typescript,Synchronous,Browser Close,实际上,我想在用户关闭浏览器后使用服务调用(Delete方法)更新数据库中的标志。我能够使用onbeforeunload和onunload事件检测浏览器关闭操作,但异步调用对我不起作用(有时在调试模式下可以正常工作,但在更高环境下不起作用) 然后,我尝试发出同步请求,但后来我发现Chrome现在不允许在页面关闭期间同步XHR,因为页面被用户导航离开或关闭。 检查链接: 我尝试了新的XMLHttpRequest()作为同步,获取api也Navigator.sendBeacon(),但不幸的是,没有

实际上,我想在用户关闭浏览器后使用服务调用(Delete方法)更新数据库中的标志。我能够使用
onbeforeunload
onunload
事件检测浏览器关闭操作,但异步调用对我不起作用(有时在调试模式下可以正常工作,但在更高环境下不起作用)

然后,我尝试发出同步请求,但后来我发现Chrome现在不允许在页面关闭期间同步XHR,因为页面被用户导航离开或关闭。 检查链接:

我尝试了新的
XMLHttpRequest()
作为同步,获取api也
Navigator.sendBeacon()
,但不幸的是,没有任何东西适合我

请提供一些有用的建议,因为我访问了这么多的帖子,但没有什么对我有用

提前谢谢

我有一些解决办法。希望他们中的任何一个都能解决你的问题

在组件构造函数中编写上述代码

在我看来,更好的方法是制作心跳api,它每N秒发送一次请求,通知服务器会话处于活动状态,用户处于联机状态。在服务器上,每M分钟检查一次是否有超过N秒的心跳请求:如果是,则执行API请求(崩溃时要执行的)

刷新页面、关闭选项卡或关闭浏览器时将触发“beforeunload”

无法确保每次用户退出浏览器页面时都会触发特定功能。原因是浏览器可能出于多种原因关闭窗口。是的,它可能是一个用户操作,但这不是唯一的情况。例如,浏览器可能会崩溃

在我的情况下,我必须找到另一种策略来跟踪用户停留在页面上的时间。例如,我计划在用户退出之前发送许多API调用,其中包含了解他在页面上停留的所有信息。当我找到一个好的解决方案时,我会更新答案。无论如何,我仍将等待更好的答案。

您可以使用fetch API。 语法是:

fetch('API'{
方法:“POST',//还支持其他opn,如GET、PUT和DELETE
正文:“”,
keepalive:是的
});
再补充一句:

谢谢您的回复。实际上,我很清楚我需要执行此服务调用的场景,但我的问题是如何成功地进行此调用,以便它以同步方式调用api。
constructor() {
    window.onbeforeunload = ()=>{
      //call API here
    }
  }
  @HostListener('window:beforeunload', ['$event'])
    beforeUnload(e: Event) {
        e.returnValue = false;
    }