我尝试了一些方法,看看我是否可以创建一个跨浏览器解决方案来推迟一个popstate事件但是没有运气。
任何人有任何想法或想法?
下面显然不起作用,但有些效果:
$(window).on('popstate', function(e) {
// something here to delay the history pageload
console.log('a wild console has appeared!');
});
所以流程将遵循以下顺序:
答案 0 :(得分:0)
根据Documentation popstate事件是
仅通过执行浏览器操作(例如单击后退按钮
)触发
所以我不相信当用户点击“转发”时会触发它(并且在某些浏览器中会有所不同)
供参考,以下是全文:
当活动历史记录条目更改时会触发popstate事件。如果正在激活的历史记录条目是通过调用history.pushState()创建的,或者受到对history.replaceState()的调用的影响,则popstate事件的state属性包含历史记录条目的状态对象的副本。
请注意,只调用history.pushState()或history.replaceState()不会触发popstate事件。 仅通过执行浏览器操作(例如点击后退按钮(或在JavaScript中调用history.back())触发popstate事件。
浏览器倾向于在页面加载时以不同方式处理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>