我试图捕捉浏览器事件,如标签关闭和刷新在我的Angular 6应用程序。它的工作很好,在调试模式,但它不工作,如果我关闭调试模式,并运行应用程序。以下是代码片段
registerDOMEvents() {
window.addEventListener('unload', () => {
if (this.validNavigation === 0) {
this.endSession();
}
});
document.addEventListener('keydown', (e) => {
const key = e.which || e.keyCode;
if (key === 116) {
this.validNavigation = 1;
}
});
}
endSession() {
this.logout();
localStorage.clear();
}
ngOnInit() {
this.registerDOMEvents();
}
这个问题可能有什么问题?
2条答案
按热度按时间6tqwzwtp1#
您需要使用
beforeunload
而不是unload
。beforeunload
更可靠,并且在文档及其资源即将卸载时触发,而unload
在页面已经卸载时触发。你的
endSession()
必须是同步的,因为浏览器不会等待任何回调被调用。据我所知,angular http服务不提供同步http调用,但你可以用XMLHttpRequest
自己做:也看看这个article。如果你的客户端的浏览器支持这个功能,也许你可以使用
navigator.sendBeacon
。gc0ot86w2#
这只会在关闭窗口/选项卡时发生。