意外 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
),因为页面 现在 加载 由 重新加载。因此,您获取的是用于加载页面的方法,而不是用户用于退出页面的方法。
我正在尝试在卸载之前处理一些逻辑,如果用户正在重新加载页面或返回,我不希望该逻辑 运行。
我设置了这样的东西。
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
),因为页面 现在 加载 由 重新加载。因此,您获取的是用于加载页面的方法,而不是用户用于退出页面的方法。