[vuejs/vue-router]期望url为http://localhost:8080/index.html#!/index格式,带一个!

2024-01-03 877 views

回答

9

2.0移除了hashbang(#!)模式。具体是什么场景下需要!?

8

我昨天看了一下0.7版本的源码,好像可以hashbang支持。

是我们公司很多历史应用都带有"!",如果不带“!”很多底层系统需要做改造,比如:访问量采集。都识别不了。

除了使用1.0以下的版本,有什么办法可以自定义改造吗

7

没有办法自定义。 但如果要兼容访问旧url,只要在app启动的时候判断一下就好了

if (location.hash.indexOf('#!') > -1) {
  router.replace(location.href.split('#!')[1])
}
2

@fnlctrl 公司之前也是用的vue-router0.7以下版本,最近本人折腾升级了,背景是之前的url已经打印成二维码分发出去了,所以,为了兼容老链接,必须做个跳转; 现在的情况是 vue-router 2.3.0版本 url #! 会自动跳转到 #/! 导致app启动时候也没法判断 所以,我想问你提供的解决办法,有实践过吗?具体的判断应该写在什么地方?是vue-router的源码里面吗?

9

@liuyuan87 同命相连,你尝试自己 fork 一个 2.x的版本,然后修改此处吧: https://github.com/vuejs/vue-router/blob/83443edf4c6c83c394bf4bc879edab11bbe2645d/src/index.js#L226 或者借鉴一下 4楼的 replace 的做法:

<script>
  // redirect 兼容旧的路由路径
  if (location.hash.indexOf('#!') > -1) {
    location.replace('#' + location.href.split('#!')[1])
  }
</script>
<script src="demo/manifest.js"></script>
<script src="demo/vendor.js"></script>
<script src="demo/getcrx.cn.js"></script>