You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue Router中goBack回退跳出站点时如何设置兜底路径/路由

问题原因

你现在写的判断逻辑只能识别「浏览器历史栈里有没有上一条记录」,但受浏览器安全策略限制,前端根本拿不到历史栈中上一条记录的完整URL,自然没法判断上一条是不是本站页面,所以才会出现用户从外链点进来、或者直接输地址进页面时,点返回直接跳出站点的问题。

实现逻辑

搭配document.referrer(即页面的来源地址)做双重校验就能满足需求,判断规则很简单:

  • 历史栈压根没有上一条记录的,直接跳首页
  • 有上一条记录,但来源地址为空(对应直接输URL、隐私模式访问、跨域跳转不带来源的场景),或者来源地址域名和当前站点不一样的,直接跳首页
  • 剩下的情况正常执行返回上一页就行
修正后的组件代码
setup(props, { attrs }) {
    const router = useRouter()
    const { t } = useI18n()

    const goBack = (): void => {
      if (attrs.onClick) return

      const currentSiteOrigin = window.location.origin
      const referrer = document.referrer
      const hasPrevHistory = router.options.history.state.back !== null
      const prevPageIsInternal = referrer.startsWith(currentSiteOrigin)

      if (!hasPrevHistory || !prevPageIsInternal) {
        router.replace('/')
        return
      }
      
      router.back()
    }

    return {
      t,
      goBack
    }
  }
})
</script>
补充提示
  • 这个方案能覆盖绝大多数常规访问场景,就算遇到用户浏览器手动禁用了来源传递的极端情况,也会默认走跳首页逻辑,绝对不会跳出站点。
  • 如果需要100%精准判断,你可以在所有站内路由跳转的时候往sessionStorage里写一个访问路径标记,点返回的时候先查这个标记有没有对应记录,没有就跳首页。但这个方案需要给所有站内跳转逻辑加埋点,维护成本高,普通业务场景用上面的方案完全够用。

内容的提问来源于stack exchange,提问作者Tomas Gil Amoedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:12:26