18910140161

Hash模式下,query在hash前无法获取到

顺晟科技

2022-09-03 12:31:21

131

Version4.0.14


顺晟科技:

如果hash在前query在后,如:http://localhost:8090/#/login?query=121使用浏览器的 location.search 也是获取不到,java中的URL类也一样,不知道这个是bug还是设计如此?

按照 js 来看 ,没有 location.search ,#/page?aa=10 是hash

#/login?query=121 全是 hash。

举个例子,如果没有 VueRouter 解析,那么 http://example.com/path?id=1#/page?r=12 这个 URL 只有这么几个部分:

举个例子,楼主希望在后端通过 URL 类处理,以 JavaScript 为例:

./vue.html?aa=10#/page,

楼主说的 location.search 对应的是 Query String 部分,而 # 字符及其后面的字符统称为 Fragment,关于这部分的定义可以参考 rfc3986 3.5 这部分。

./vue.html#/page?aa=10

注意几点:

先说结论,这是正常的。

当然,因为 VueRouter 采用了和 URL 一致的规范,所以并非一定要在 VueRouter 中,我们也可以将这部分字符串当成 URL 自己解析即可,这只是非常简单的字符串处理而已。

Reproduction linkhttp://demo.heyj.top/

Fragment 的用处并非只有用于路由,平时可以多留意下,最常见的比如 a 链接中 Fragment 是用于锚点而非路由。

VueRouter 只是借助 URL 中的 Fragment 部分实现了路由。所以这部分的定义仅限于 VueRouter 内部。

可以先了解一下什么是 URL (Uniform Resource Locators),在 rfc3986 中统一称为 URI: rfc3986 1

在加入 VueRouter 之后,其内部才对 hash 进行了解析,所以我们只能从应用内部获取这部分信息,比如:

按照 js 来看 ?aa=10 是 location.search ,#/page 是hash

按照 路由设置 page 是path,aa=10 是 query。没有问题。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航