使用JavaScript检测硬重载

F L*_*has 8 javascript browser reload

为了澄清:不是要尝试区分刷新和重新加载,因此这不是刷新和重新加载的重复.我试图找出是否有办法检测用户何时触发重载而不是正常重新加载.我问,因为我想在重载之前执行一些代码.


使用JavaScript,通过浏览器的重新加载按钮,或通过Shift+ Ctrl+ 等快捷方式R,可以执行浏览器选项卡的重载.是否可以使用JavaScript 检测这样的重载?如果是这样的话?

我知道可以检测到事件触发正常重载事件的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);
  }
});
Run Code Online (Sandbox Code Playgroud)

我希望能够区分正常的重新加载,例如location.reload(),和强制重新加载,例如location.reload(true).

Mos*_*ini 3

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

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

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

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


归档时间:

查看次数:

520 次

最近记录:

7 年,4 月 前