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).
您无法在 javascript 中检测到硬刷新,因为无法访问当前加载页面的标题。
JavaScript 的问题是它没有 304 的概念。它开始在网页的上下文中执行,但它不知道自身或页面是如何到达那里的。
但是,服务器可以从请求标头判断这是否是硬刷新,因此可以选择合作。例如,服务器可以<meta>在响应中包含自定义标签或添加特殊类<body>,然后您的脚本将可以访问此信息。
另一种选择是根据浏览器/操作系统拦截组合键,并在触发硬刷新之前采取行动(在 url 中附加某些内容、设置 cookie 或本地/会话存储属性)
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |