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

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

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

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

当前回答

在HTML5之前,我们可以使用:

parent.location.hash = "hello";

and:

window.location.replace("http:www.example.com");

此方法将重新加载页面,但HTML5引入了不应重新加载页面的history.pushState(page,caption,replace_url)。

其他回答

parent.location.hash = "hello";

位置的任何更改(window.location或document.location)都将导致对新URL的请求,如果您不仅仅是更改URL片段。如果更改URL,则更改URL。

如果您不喜欢当前使用的URL,请使用服务器端URL重写技术,如Apache的mod_rewrite。

这段代码对我很有用。我在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');
          }
        });
      }

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

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

您的新url。

let newUrlIS =  window.location.origin + '/user/profile/management';

在某种意义上,调用pushState()类似于设置window.location=“#foo”,因为两者都会创建并激活与当前文档相关的另一个历史条目。但是pushState()有一些优点:

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

您可以签出根目录:https://developer.mozilla.org/en-US/docs/Web/API/History_API