意外 performace.navigation.type onbeforeunload

Unexpected performace.navigation.type onbeforeunload

我正在尝试在卸载之前处理一些逻辑,如果用户正在重新加载页面或返回,我不希望该逻辑 运行。

我设置了这样的东西。

window.onbeforeunload = function(e) {
  if(window.event && window.event.clientX){ //IE
    //some logic
  } else if (e.currentTarget.performance.navigation.type === e.currentTarget.performance.navigation.TYPE_RELOAD) {
     // another logic
  } else if(e.currentTarget.performance.navigation.type === e.currentTarget.performance.navigation.TYPE_BACK_FORWARD){
     // yet another logic
  }
}

我有其他代码来处理刷新等来自键盘输入的代码,似乎一切正常。现在我关心的是这段代码。由于某些原因,在第一个重新加载或后退按钮上 navigation.type 返回为 0,但之后所有其他重新加载或后退按钮都会在 navigation.type 中填充正确的值。即使在 IE 中,第一次重新加载时也没有正确设置某些内容(不确定是鼠标位置还是什么)。是什么导致了这样的事情?

首先我觉得你要写的是e.currentTarget.performance.navigation.type(不是e.current.performance.navigation.type),和写window.performance.navigation.type是一样的。此变量告诉您​​此页面是如何导航到 ,而不是页面退出的导航类型。

为什么你第一次得到 performance.navigation.type 作为 0 (performance.navigation.TYPE_NAVIGATE) 是页面 第一次通过直接导航加载时间。后续重新加载会将 performance.navigation.type 设置为 1 (performance.navigation.TYPE_RELOAD),因为页面 现在 加载 重新加载。因此,您获取的是用于加载页面的方法,而不是用户用于退出页面的方法。