vue-router源码疑问,hash模式下为什么还要判断supportsPushState?而不直接去用hash的方法?

发布于 2022-09-12 02:02:49 字数 623 浏览 12 评论 0

最近看vue-router源码的时候,发现在hash模式下push或replace这个path的时候,会先判断是否支持h5的PushState方法,如果支持就用新的,不支持才使用location.hash或location.replace。

我知道hash和history的优缺点,但是这里我们已经明确使用hash模式了,但是为什么源码中还是要去做判断,如果支持就用新方法?不太理解为什么这么做?这么做的优势是什么?

// hash.js
function pushHash (path) {
  // 这里为什么要去判断????????
  if (supportsPushState) {
    pushState(getUrl(path))
  } else {
    window.location.hash = path
  }
}

function replaceHash (path) {
  // 这里为什么要去判断????????
  if (supportsPushState) {
    replaceState(getUrl(path))
  } else {
    window.location.replace(getUrl(path))
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

百合的盛世恋 2022-09-19 02:02:50

你还能约束用户用啥浏览器访问?

你就算设个 hash 模式,用户用 IE9 / Android 4.0 Google Browser 访问,咋办?


你说 ok,这些不支持的浏览器就让它们去死吧!我就要只跑在兼容的浏览器上面。

问题是,vue-router 也不是你写的啊,凭啥让人家就不兼容了?

ぽ尐不点ル 2022-09-19 02:02:49

可能有人没理解题主的意思


我觉得跟优雅降级和可访问性和兼容这个没关系吧

他问的是 用了hash的情况为什么要用history模拟hash的方式进行跳转

优雅降级是设置了history,在浏览器不支持history的情况下用hash

具体的看这条记录commit feat: enhance hashHistory to support scrollBehavior

是为了支持scrollBehavior

具体原因是window.history.pushState可以传参key过去,这样每个url历史都有一个key,用key保存了每个路由的位置信息

要走就滚别墨迹 2022-09-19 02:02:49

这是为了考虑页面的可访问行和优雅降级。

み格子的夏天 2022-09-19 02:02:49

没有彻底读过 vue-router 的源码,前两天看到这个问题也很好奇就关注了一下
今天看 vue-router 文档发现了这个 https://router.vuejs.org/zh/a... 参数
感觉设计者的思路除了 李十三答主 提到的还有就是为了兼容更多浏览器

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文