1

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

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

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

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

   // something here to delay the history pageload        

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

});

因此流程将遵循以下顺序:

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

1 回答 1

1

根据文档,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>

于 2015-04-10T19:05:27.707 回答