如何在不将页面重新加载到新 url 的情况下完全更改 url?
how to fully change url without reloading the page to new url?
我已经解决了很多关于在不重新加载的情况下更改 url 的问题。虽然我尝试了几乎所有的方法,但我无法在不重新加载新页面的情况下完全更改页面的 url ,包括其域名部分。我该怎么做?
您可以使用 pushState 来执行您描述的操作。作为示例(从此处提取:https://www.aspsnippets.com/Articles/Change-URL-in-Browser-Address-Bar-without-reloading-using-JavaScript-and-jQuery.aspx)
<script type="text/javascript">
function ChangeUrl(title, url) {
if (typeof (history.pushState) != "undefined") {
var obj = { Title: title, Url: url };
history.pushState(obj, obj.Title, obj.Url);
} else {
alert("Browser does not support HTML5.");
}
}
</script>
<input type="button" value="Page1" onclick="ChangeUrl('Page1', 'Page1.htm');" />
<input type="button" value="Page2" onclick="ChangeUrl('Page2', 'Page2.htm');" />
<input type="button" value="Page3" onclick="ChangeUrl('Page3', 'Page3.htm');" />
请注意,如果您尝试直接在浏览器中打开测试文件(即,如果 URL 是 file://任何)。浏览器的行为不同。您将需要通过一些 http 服务器提供服务。
编辑
这没有回答 OP 提出的具体问题。它会更改路径,但您不能通过 pushState 更改 URL 的主机名部分。正如其他人已经回答的那样,由于同源政策,如果不重新加载页面就无法更改它。我把它留在这里以防其他人只需要更改 URL.
的路径部分
这是不可能的,这是有充分理由的。您可以在此处获得更多相关信息:Same-origin policy
我已经解决了很多关于在不重新加载的情况下更改 url 的问题。虽然我尝试了几乎所有的方法,但我无法在不重新加载新页面的情况下完全更改页面的 url ,包括其域名部分。我该怎么做?
您可以使用 pushState 来执行您描述的操作。作为示例(从此处提取:https://www.aspsnippets.com/Articles/Change-URL-in-Browser-Address-Bar-without-reloading-using-JavaScript-and-jQuery.aspx)
<script type="text/javascript">
function ChangeUrl(title, url) {
if (typeof (history.pushState) != "undefined") {
var obj = { Title: title, Url: url };
history.pushState(obj, obj.Title, obj.Url);
} else {
alert("Browser does not support HTML5.");
}
}
</script>
<input type="button" value="Page1" onclick="ChangeUrl('Page1', 'Page1.htm');" />
<input type="button" value="Page2" onclick="ChangeUrl('Page2', 'Page2.htm');" />
<input type="button" value="Page3" onclick="ChangeUrl('Page3', 'Page3.htm');" />
请注意,如果您尝试直接在浏览器中打开测试文件(即,如果 URL 是 file://任何)。浏览器的行为不同。您将需要通过一些 http 服务器提供服务。
编辑 这没有回答 OP 提出的具体问题。它会更改路径,但您不能通过 pushState 更改 URL 的主机名部分。正如其他人已经回答的那样,由于同源政策,如果不重新加载页面就无法更改它。我把它留在这里以防其他人只需要更改 URL.
的路径部分这是不可能的,这是有充分理由的。您可以在此处获得更多相关信息:Same-origin policy