使用 JavaScript 检测硬重新加载

2024-05-04

为了澄清: I am not试图区分刷新和重新加载,因此这不是重复的刷新与重新加载 https://stackoverflow.com/questions/5004978/check-if-page-gets-reloaded-or-refreshed-in-javascript。我想找出是否有一种方法可以检测用户何时触发hard reload https://stackoverflow.com/a/14969509/981933而不是正常的重新加载。我这样问是因为我想在hard仅重新加载。


Using JavaScript, via the browsers' reload button, or by a shortcut like Shift+Ctrl+R it is possible to perform a hard reload of a browser tab. Is it possible to detect such a hard reload with JavaScript and if so how?

我知道人们可以检测到何时触发正常的重新加载事件onbeforeunload事件,我可以找出导航类型来区分刷新和重新加载,但我无法检测到硬重新加载。

到目前为止,我正在使用以下 JS 代码来检测重新加载:

window.addEventListener('beforeunload', function (e) {
  // Cancel the event
  e.preventDefault();
  // Chrome requires returnValue to be set
  e.returnValue = '';

  // For older browsers
  console.log('Is reloading?', event.currentTarget.performance.navigation.type === 1);

  // For modern browsers
  const perfEntries = performance.getEntriesByType("navigation");

  for (let i = 0; i < perfEntries.length; i++) {
    console.log('Is reloading? ', perfEntries[i].type === 1);
  }
});

我希望能够区分正常的重新加载,例如,location.reload(),以及强制重新加载,例如,location.reload(true) https://developer.mozilla.org/en-US/docs/Web/API/Location/reload.


您无法在 JavaScript 中检测到硬刷新,因为无法访问当前加载页面的标题。

J的问题javaScript 的一个特点是它没有 304 的概念。它开始在网页的上下文中执行,但它不知道自身或页面是如何到达那里的。

但是,服务器可以从请求标头判断这是否是硬刷新,因此可以选择合作。例如,服务器可以包含自定义的<meta>在响应中标记或添加一个特殊的类<body>然后您的脚本将可以访问此信息。

另一种选择是基于浏览器/操作系统拦截组合键并在触发硬刷新之前采取行动(将某些内容附加到 url、设置 cookie 或本地/会话存储属性)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JavaScript 检测硬重新加载 的相关文章

随机推荐