14

我在使用“popstate”事件处理程序时遇到问题,这是我的代码:

window.addEventListener("popstate", function (event){
    if (event.state) {
        alert('abc')
    }
});

// The data object is arbitrary and is passed with the popstate event.
var dataObject = {
    createdAt: '2011-10-10',
    author: 'donnamoss'
};

var url = '/posts/new-url';
history.pushState(dataObject, document.title, url);

我希望这段代码在执行时会弹出一个警告框,但是什么也没发生。

这里有什么问题吗?

谢谢你。

4

3 回答 3

25

pushState不触发popstate事件,仅单击后退/前进按钮(或使用退格键)或调用history.back()/history.go(n)会触发此事件。

另外,在 webkit 浏览器中,popstate会在页面onload事件之后触发事件,但 Firefox 和 IE 没有这种行为。

于 2013-01-04T03:42:56.523 回答
6

不,它不会,

根据MDN 文档

请注意,仅调用 history.pushState() 或 history.replaceState() 不会触发 popstate 事件。popstate 事件仅通过执行浏览器操作来触发,例如单击后退按钮(或在 JavaScript 中调用 history.back())。

再次根据这个问题,当您调用时popstate不会触发事件。ChromepushState()

于 2013-01-04T03:44:07.537 回答
0

history.pushState()根据定义不会触发popstate事件。

在导航到会话历史条目时,在某些情况下会触发 popstate 事件。

此事件仅在导航到历史条目时触发,通过按后退/前进按钮或history.go/back

于 2013-01-04T05:28:13.343 回答