Javascript popstate事件处理程序似乎无法工作

Javascript popstate事件处理程序似乎无法工作,javascript,Javascript,“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

“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);
我希望这段代码在执行时会弹出一个警告框,但是什么也没发生

这里有什么问题吗


谢谢。

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

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

不会

依照

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

同样,根据
popstate
事件在
Chrome
中不会触发,当您调用
pushState()

时,根据定义不会触发事件

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


此事件仅在导航到历史记录条目时触发,方法是按下后退/前进按钮或
历史记录。返回

在中测试代码,
.pushState()
事件似乎失败。用字符串替换变量允许我触发事件。@DJDavid98-这只意味着
pushState
返回
false
undefined
。加载页面或调用history.pushState()时,会触发前面提到的popstate事件。对于后者,事件对象将包含一个状态属性,该属性保存给定给history.pushState()的数据对象。你能检查一下吗,plz,我引用了Javascript Web应用程序中的话?我读过,没有发现触发
popstate
事件的任何步骤。昨天我正在做一个与历史api相关的主题,我确信
pushState
不会触发任何
popstate
事件。如果一个推送动作触发一个pop事件不是很奇怪吗?如果推送触发了pop,那么历史堆栈中还剩下什么?什么都没有?现在我从我的朋友那里借了一本Javascript Web应用程序书,是的,它说
pushState()
会触发
popstate
事件,但我认为这是这本书的一个错误,网络上没有其他资源证实这种行为。非常感谢御宅族,我本可以选择德里克作为他的快速回复,但最终选择了你的答案,因为你回答我问题的热情。谢谢。对于从History.js(你还记得吗?)迁移的用户来说,这可能会很奇怪,因为在History.js中总是触发
statechange
事件。。。