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

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

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

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

当前回答

这现在可以在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文章。

其他回答

parent.location.hash = "hello";

如果你想做的是允许用户为页面添加书签/共享页面,而你不需要它恰好是正确的URL,并且你没有使用哈希锚来做任何其他事情,那么你可以分两部分来做;您使用该位置。然后在主页上执行检查,以查找其中包含哈希锚的URL,并将您重定向到后续结果。

例如:

用户位于www.site.com/section/page/4用户执行一些操作,将URL更改为www.site.com/#/section/page/6(带有哈希)。假设您已将第6页的正确内容加载到页面中,因此除了哈希之外,用户不会受到太大的干扰。用户将此URL传递给其他人,或为其添加书签其他人或同一用户稍后会访问www.site.com/#/ssection/page/6www.site.com/上的代码使用如下方式将用户重定向到www.site.com/section/page/6:

if (window.location.hash.length > 0){ 
   window.location = window.location.hash.substring(1);
}

希望这是有意义的!对于某些情况,这是一种有用的方法。

这段代码对我很有用。我在ajax应用程序中使用了它。

history.pushState({ foo: 'bar' }, '', '/bank');

一旦使用ajax将页面加载到ID中,它会自动更改浏览器url,而无需重新加载页面。

这是下面的ajax函数。

function showData(){
    $.ajax({
      type: "POST",
      url: "Bank.php", 
      data: {}, 
      success: function(html){          
        $("#viewpage").html(html).show();
        $("#viewpage").css("margin-left","0px");
      }
    });
  }

示例:从任何页面或控制器(如“Dashboard”),当我单击银行时,它会使用ajax代码加载银行列表,而无需重新加载页面。此时,浏览器URL将不会更改。

history.pushState({ foo: 'bar' }, '', '/bank');

但是当我在ajax中使用这段代码时,它会在不重新加载页面的情况下更改浏览器url。下面是完整的ajax代码。

function showData(){
        $.ajax({
          type: "POST",
          url: "Bank.php", 
          data: {}, 
          success: function(html){          
            $("#viewpage").html(html).show();
            $("#viewpage").css("margin-left","0px");
            history.pushState({ foo: 'bar' }, '', '/bank');
          }
        });
      }

正如Thomas Stjernegaard Jeppesen所指出的,当用户浏览Ajax链接和应用程序时,您可以使用History.js修改URL参数。

距离这个答案已经过去了将近一年,History.js不断发展,并变得更加稳定和跨浏览器。现在,它可以用于管理兼容HTML5的历史状态,也可以用于许多仅支持HTML4的浏览器。在本演示中,您可以看到它如何工作的示例(以及如何尝试其功能和限制)。

如果您在如何使用和实现这个库方面需要任何帮助,我建议您查看演示页面的源代码:您会发现它非常容易做到。

最后,要全面解释使用哈希(和hashbangs)的问题,请查看Benjamin Lupton的链接。

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

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