如何在 javascript 中不解码就获取页面 url?

how to get page url without decode in javascript?

如何在 javascript 中不解码的情况下从 window.location.href 获取页面 URL?

例如我们不能得到这个 URL: http://example.com/report#title=example_report&url=project_chart%2F%3Fproject_id%3D77.

当我们在 javascript 中使用 window.location.href 时,我们会得到这个 URL:

http://example.com/report#title=example_report&url=project_chart/?project_id=77

但我想得到一模一样的真实URL。

有什么解决办法吗?

已编辑

正如@Eugenio 所说,$(document)[0].URL 工作正常,但安全吗?!

尝试使用encodeURI.

例如;

var url = window.location.href;
var originalUrl = encodeURI(url);

这个函数(encodeURI)编码特殊字符, 除了: , / ? :@&=+$#

您可以使用 encodeURIComponent() 对这些字符进行编码。

您可以使用encodeURIComponent,但您必须获取要编码的字符串部分。

encodeURIComponent(window.location.href.split('&url=')[1])

或者您可以使用 RegExp 来更精确。

正如@Eugenio 所说, 我使用下面的代码并且工作正常:

var url = $(document)[0].URL;

为了做出清晰简洁的回答,我将总结所有评论。

对于您的问题,最好的解决方案是使用 document[x].url,其中 x 是您要使用的 URL 部分的索引。

window.location.hrefdocument.url 之间的问题的主要区别在于,最后一个以字符串格式为您提供 URL,而另一个 return URL 已经解析。

使用任何一种都是完全正常和安全的,并且 widely adopted in all modern browsers

var url1 = document.URL;
var url2 = window.location.href;

document.getElementById("documentUrl").append (url1);
document.getElementById("windowLocationUrl").append (url2);
<div id="documentUrl">document.url: </div>
<div id="windowLocationUrl">window.location.href: </div>

此特定代码段示例没有区别,因为 URL 没有附加参数。无论如何,希望这有所帮助。干杯!