gpt4 book ai didi

javascript - 使用 JavaScript 检测硬重载

转载 作者:数据小太阳 更新时间:2023-10-29 04:17:37 26 4
gpt4 key购买 nike

澄清一下:没有试图区分刷新和重新加载,因此这不是 refresh vs reload 的副本.我试图找出是否有一种方法可以检测用户何时触发 hard 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);
}
});

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

最佳答案

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

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

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

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

关于javascript - 使用 JavaScript 检测硬重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54040182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com