计数页面重新加载

时间:2015-07-24 10:10:22

标签: javascript

我认为这是不可能的,但我会问我们社区的巫师,也许有人有诀窍。

当有人重新加载页面两次以上时,客户端想要在我的js注入平台上触发事件。他拒绝在cookie上设置一个值onbeforeonload或在服务器端有一些可以计数的东西。

任何人都知道在客户端计算页面重新加载的方法吗?

1 个答案:

答案 0 :(得分:4)

performance.navigation可用于区分导航,历史记录导航和页面重新加载。

由于您想知道页面是否刷新了两次,因此需要某种形式的持久性,因为浏览器不会跟踪页面重新加载的次数。为此,history API似乎最明智,因为它的状态与页面实例相关联。

例如(显示重新加载次数的演示:https://robwu.nl/s/reloadCount.html):

// On load:
var state = history.state || {};
var reloadCount = state.reloadCount || 0;
if (performance.navigation.type === 1) { // Reload
    state.reloadCount = ++reloadCount;
    history.replaceState(state, null, document.URL);
} else if (reloadCount) {
    delete state.reloadCount;
    reloadCount = 0;
    history.replaceState(state, null, document.URL);
}
if (reloadCount >= 2) {
    // Now, do whatever you want...
    alert('The page was reloaded more than twice!');
}

我已经测试过该演示适用于以下浏览器:

  • Safari 8 +
  • Chrome 14+(可能更早,我没有打扰测试13 - )
  • Opera 15 +
  • Firefox 7 +
  • Internet Explorer 9 +

如果您需要支持较旧的浏览器(不支持performance API),那么您可以在卸载时使用时间戳更新历史状态,并检查时间戳(例如{{1 Date.now()中的}}接近加载时的当前时间。