如何在JavaScript中解析没有基础URL的相对URL

11

对于绝对 URL,我们可以使用 new URL(str) 进行解析;对于基于基础 URL 的相对 URL,我们可以使用 new URL(path, base)。如果没有基础 URL,那么该如何解析相对 URL 呢?例如:folder/file.ext?a=1&b=2#hash 应被解析为:

{
    pathname: "folder/file.ext",
    search: "?a=1&b=2",
    hash: "#hash"
}

第三方库没问题,但我更喜欢内置的库和函数。偏好跨平台(浏览器/Node.js)解决方案。不需要考虑IE浏览器。


1
为什么不在你的字符串前面添加www.example.com/并解析它... - vaku
你可以使用 new URL('folder/file.ext?a=1&b=2#hash', 'http://dummy'); 作为解决方法。 - Zlatko
如果您大致了解相对URL的参数,也就是说您的标识符“?”和“#”是唯一的,那么您可以使用基本的JS,只需拆分相对URL字符串,将从中获得的数据拼接成自己的JSON对象。 - Stöger
谢谢大家的快速回复。那么这似乎是一个愚蠢的问题;请创建一个答案,这样我就可以给予信用并完成这个问题。(或者我应该彻底删除这个问题吗?) - Franklin Yu
1
这是一个很好的问题,尚未得到答复。 @Zlatko 当您使用具有双点(“..”)的相对URL时,这将无法正常工作,因为这些需要保留,直到确定绝对URL为止。@Stöger 手动字符串转换容易出错,应该委托给库来处理。 - mdcq
1个回答

7
这是一个很好的问题。目前,URL标准不支持在没有基本URL的情况下操作相对URL。使用虚拟基本URL并不总是有效,因为像../path这样带有点段的相对URL将被解析为没有可能稍后恢复的基本URL。很遗憾URL标准没有考虑到这一点。尽管有一些讨论要在#531中添加它。

与此同时,请查看reurl,这是一个库,允许您操作相对URL而无需使用脆弱的手动字符串操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接