有没有办法延迟popstate事件?

时间:2015-04-10 18:56:17

标签: javascript jquery html5 pushstate popstate

我尝试了一些方法,看看我是否可以创建一个跨浏览器解决方案来推迟一个popstate事件但是没有运气。

任何人有任何想法或想法?

下面显然不起作用,但有些效果:

$(window).on('popstate', function(e) {

   // something here to delay the history pageload        

      console.log('a wild console has appeared!');

});

所以流程将遵循以下顺序:

  • 点击浏览器“后退”或“前进”按钮
  • 运行初始代码
  • 页面更改前的延迟
  • 页面更改

1 个答案:

答案 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>