history.pushState()导致浏览器导航

时间:2018-09-05 16:25:41

标签: javascript html5

我试图更改页面的URL,而不将浏览器导航到该页面并引起刷新。在MDN documentation for manipulating the browser history中,其内容如下:

  

假设http://mozilla.org/foo.html执行以下JavaScript:

var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");
  

这将导致URL栏显示http://mozilla.org/bar.html,但不会导致浏览器加载bar.html甚至检查bar.html是否存在。

StackOverflow上的每个人似乎也都证实了这一点。但是,在我的代码中,window.history.pushState()正在浏览页面。控制台甚至说得很清楚:

Navigated to http://localhost:8090/?

这是我正在使用的代码:

attemptLogin(username, password)
  .then((result) => {
    // navigate to Landing Page
    window.history.pushState('data', 'title', '/');
  })

我也不确定为什么要添加问号,但是它正在浏览器中导航这一事实似乎是一个更加紧迫的问题。有谁能提供任何见识?

1 个答案:

答案 0 :(得分:1)

您提供的代码不会产生您所描述的效果。

您正在以某种方式触发该代码。您所说的症状是由于单击链接或提交表单等事件引起的。

JavaScript正在运行,然后发生了链接或表单提交的正常行为……这将导致浏览器导航到新的URL。

您需要防止该操作的默认行为,例如:

document.querySelector("a").addEventListener("click", handler);

function handler(evt) {
    evt.preventDefault();

    attemptLogin(username, password)
        .then((result) => {
                    window.history.pushState('data', 'title', '/');
        });
}