【发布时间】:2018-10-26 03:21:22
【问题描述】:
我有一个跟踪机制,在用户停留在网页上期间,我通过该机制将 JSON 对象发送到 API 端点。所以我正在发送一些特定事件的 API 调用。当用户离开页面时,API 必须接收调用。
问题是我使用下面的函数在用户关闭浏览器时触发,但这些函数仅在浏览器调试模式下触发。
// page-wrapper.component.ts
...
// triggers on DOM unload
@HostListener('window:unload', ['$event'])
unloadHandler(event) {
this.service.apiCall(); // this is nevertriggered
console.log('unloaded DOM') // triggered only in browser debug mode
}
// triggers just before unloadHandler()
@HostListener('window:beforeunload', ['$event'])
beforeUnloadHander(event) {
this.service.apiCall(); // same as above
}
所以我尝试了这两种方法。如果我调试它们这些方法似乎被触发,但 API 没有收到任何东西。
我可以确保与 API 联系的函数已经过测试并且没有问题。
我认为问题与unloadHandler() 或beforeUnloadHandler() 有关。
当用户关闭浏览器窗口或浏览器选项卡时,有人知道如何调用 api 吗?
注意:应用程序可以存在于独立的浏览器选项卡或 iframe 中。
【问题讨论】:
-
你能进入函数 beforeUnloadHander 和 unloadHandler 的内部吗?您希望您的 API 接收什么?
-
只有当我到达
return false时,我才能联系到beforeUnloadHandler()。当我这样做时,浏览器会询问我是否确定要退出该页面。但是那时用户可以响应 NO 并且浏览器保持窗口打开。所以现在不是联系 API 的合适时机。当用户离开页面时,我的 API 必须接收 JSON 对象。
标签: angular typescript browser components angular5