如何知道页面是否已关闭/刷新/“返回”是在角度2+中按下的

时间:2017-12-10 09:48:37

标签: javascript angular typescript

我正在尝试使用函数window.addEventListener('beforeunload', function (event) {...} 在函数中,我想知道哪个动作触发了监听器。

我试图使用这种方法没有成功:

window.addEventListener('beforeunload', function (event) {
     if (performance.navigation.type == 1) {
        document.write('Window was refreshed!');
     } 
     else {
        document.write('Window was closed!');
     }
}); 

任何操作(刷新/关闭/'返回')都会触发else部分......我做错了什么?

也可以选择替代方法。

2 个答案:

答案 0 :(得分:1)

好吧,由于else的工作方式,你总是触发peformance.navigation处理程序。 即使您在beforeunload处理程序中编写它,它仍会在当前文档上运行,而不是您正在加载的文档,因此它将输出包含信息的PerformanceNavigation对象如何打开当前页面,而不是您要导航到的页面。

至于你的问题中有关检测用户离开页面的方法的部分,我认为此刻不可能,不是没有使用“脏”黑客/解决方法(检测用户点击了哪个按钮,检测键盘事件等。)

答案 1 :(得分:0)

使用router events您可以在app.component中订阅

ngOnInit() {
  this.router.events
    .subscribe((event) => {
      // example: NavigationStart, RoutesRecognized, NavigationEnd
      console.log(event);
    });
}