为了澄清: 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(使用前将#替换为@)