根据文档,popstate 事件是
仅通过执行浏览器操作(例如单击后退按钮)触发
所以我不相信当用户点击“前进”时它会被触发(并且在某些浏览器中会有所不同)
供参考,以下是全文:
popstate 事件在活动历史记录条目更改时触发。如果被激活的历史条目是由调用 history.pushState() 创建的或受到调用 history.replaceState() 的影响,则 popstate 事件的 state 属性包含历史条目的 state 对象的副本。
请注意,仅调用 history.pushState() 或 history.replaceState() 不会触发 popstate 事件。popstate 事件仅通过执行浏览器操作来触发,例如单击后退按钮(或在 JavaScript 中调用 history.back())。
浏览器倾向于在页面加载时以不同的方式处理 popstate 事件。Chrome(v34 之前)和 Safari 总是在页面加载时发出 popstate 事件,但 Firefox 不会。
上面的更新答案
您的代码有效。(见下文) - 我添加了一个元素来触发事件(您可以在控制台中看到结果)
确保在使用之前在 HTML 中包含 jQuery 库。
$(window).on('popstate', function(e) {
console.log('fired instantly!');
var timer = setTimeout(function() {
console.log('delayed popstate!');
clearTimeout(timer);
}, 1000);
});
$(window).trigger( 'popstate') ;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>