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()
})