VUE HASH 模式 手动改变路由信息禁止跳转

VUE的HASH模式中,手动改变路由信息,如何判断是手动修改了URL导致的跳转
如首页如下
index.html#/step1
点击下一步按钮,路由变为
index.html#/step1
如果直接修改step1为step2,页面也可跳转到第二个页面(非法)


如何判断是手动修改的URL

参考GPT和自己的思路:

可以通过监听浏览器的popstate事件来判断是否是通过浏览器前进或后退按钮触发的路由变化。如果是通过代码手动修改URL导致的路由变化,就不会触发popstate事件。可以在Vue的路由对象中添加一个beforeEach的全局路由守卫,在这个守卫里面判断是否是通过popstate事件触发的路由变化,如果不是,则可以进行处理,例如弹出提示框,禁止跳转。代码如下:

router.beforeEach((to, from, next) => {
  window.addEventListener('popstate', () => {
    // 是通过浏览器前进或后退按钮触发的路由变化,不做处理
  })
  const isManual = !(from && to && from.path === to.path)
  if (isManual) {
    // 是通过手动修改URL导致的路由变化,进行处理
    // 例如弹出提示框,禁止跳转
    alert('禁止手动修改URL!')
    return
  }
  next()
})