从PerformanceNavigationTiming中确定导航类型

13

我曾经使用 window.performance.navigation.type 来判断用户是否通过在上一页点击后退按钮返回的。

if (window.performance.navigation.type === 2) {
    window.location.reload()
}

我看到这个属性已经被弃用,被 Navigation Timing Level 2 取代。如何使用它来模拟 performance.navigation api 的行为?

2个回答

19

首先声明,我不是JavaScript专家。这是我使用导航定时 Level 2的方法。

if (String(window.performance.getEntriesByType("navigation")[0].type) === "back_forward") {
    window.location.reload()
}

window.performance.getEntriesByType("navigation") 返回每个设置的标记点(mark)的 PerformanceEntry 对象列表。如果您没有设置任何标记,则此列表包含一个对象,其中包含窗口的导航信息。


有没有常量可以检查它是否为“back_forward”?直接使用硬编码字符串进行检查是一个好主意吗?我看到在PerformanceNavigation中有常量PerformanceNavigation.TYPE_BACK_FORWARD,但我找不到任何关于字符串或整数代码与字符串映射的内容。 - Ridhuvarshan

4

window.performance.navigation.type已被弃用

以下是我对Typescript和Angular的解决方案(将其放置在app.component.ts中的ngOnInit()钩子上):

if((window.performance.getEntries()[0] as PerformanceNavigationTiming).type  === 'reload'){
  this.router.navigateByUrl('/');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接