有没有一种方法可以在不重新加载页面的情况下修改当前页面的URL?

如果可能,我想访问#哈希之前的部分。

我只需要更改域之后的部分,所以我不会违反跨域策略。

 window.location.href = "www.mysite.com/page2.php";  // this reloads

当前回答

如果您想更改url但不想将条目添加到浏览器历史记录中,也可以使用HTML5 replaceState:

if (window.history.replaceState) {
   //prevents browser from storing history with each change:
   window.history.replaceState(statedata, title, url);
}

这将“破坏”后退按钮功能。在某些情况下,这可能是必需的,例如图像库(您希望后退按钮返回到库索引页,而不是返回到您查看的每个图像),同时为每个图像提供自己的唯一url。

其他回答

使用HTML5历史API中的history.pushState()。

有关详细信息,请参阅HTML5历史API。

这现在可以在Chrome、Safari、Firefox 4+和Internet Explorer 10pp4+中完成!

有关详细信息,请参阅此问题的答案:使用新的URL更新地址栏,而无需哈希或重新加载页面

例子:

 function processAjaxData(response, urlPath){
     document.getElementById("content").innerHTML = response.html;
     document.title = response.pageTitle;
     window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
 }

然后,您可以使用window.onpopstate检测后退/前进按钮导航:

window.onpopstate = function(e){
    if(e.state){
        document.getElementById("content").innerHTML = e.state.html;
        document.title = e.state.pageTitle;
    }
};

有关操纵浏览器历史的更深入了解,请参阅MDN文章。

这就是无需重新加载即可导航的全部内容

//添加设置而不重新加载location.hash=“设置”;//如果url随哈希更改,请执行某些操作window.addEventListener('hashchange',()=>{console.log('rl哈希已更改!');});//如果url更改,请执行某些操作(不要使用哈希检测更改)//window.addEventListener('locationchange',function(){//console.log('rl已更改!');//})//删除#设置而不重新加载history.back();

这是我的解决方案(newUrl是您要用当前URL替换的新URL):

history.pushState({}, null, newUrl);

HTML5引入了history.pushState()和history.replaceState()方法,分别允许您添加和修改历史条目。

window.history.pushState('page2', 'Title', '/page2.php');

从这里了解更多信息