检查页面是否在 JavaScript 中重新加载或刷新2018-至今的新标准(性能导航时间)
2022-08-30 00:34:22
我想检查有人何时尝试刷新页面。
例如,当我打开一个页面时,没有任何反应,但当我刷新页面时,它应该显示一个警报。
我想检查有人何时尝试刷新页面。
例如,当我打开一个页面时,没有任何反应,但当我刷新页面时,它应该显示一个警报。
⚠️⚠️⚠️ is deprecated, 請參閱 Илья Зеленько's answerwindow.performance.navigation.type
了解页面实际重新加载的更好方法是使用大多数现代浏览器支持的 navigator 对象。
它使用导航计时 API。
//check for Navigation Timing API support
if (window.performance) {
console.info("window.performance works fine on this browser");
}
console.info(performance.navigation.type);
if (performance.navigation.type == performance.navigation.TYPE_RELOAD) {
console.info( "This page is reloaded" );
} else {
console.info( "This page is not reloaded");
}
来源 : https://developer.mozilla.org/en-US/docs/Web/API/Navigation_timing_API
window.performance.navigation
属性在导航计时级别 2 规范中已弃用。请改用性能导航优化
接口。
这是一项实验性技术。
在生产环境中使用浏览器兼容性表之前,请仔细检查该表。
const pageAccessedByReload = (
(window.performance.navigation && window.performance.navigation.type === 1) ||
window.performance
.getEntriesByType('navigation')
.map((nav) => nav.type)
.includes('reload')
);
alert(pageAccessedByReload);
type 只读属性返回一个表示导航类型的字符串。该值必须是下列值之一:
导航 — 导航开始于单击链接、在浏览器的地址栏中输入 URL、提交表单或通过脚本操作(如下面列出的重新加载和back_forward以外的脚本操作进行初始化。
reload — 导航是通过浏览器的重新加载操作或 location.reload() 完成的
。
back_forward — 导航是通过浏览器的历史记录遍历操作进行的。
预呈现 — 导航由预呈现提示启动。
此属性为只读。
function print_nav_timing_data() {
// Use getEntriesByType() to just get the "navigation" events
var perfEntries = performance.getEntriesByType("navigation");
for (var i=0; i < perfEntries.length; i++) {
console.log("= Navigation entry[" + i + "]");
var p = perfEntries[i];
// dom Properties
console.log("DOM content loaded = " + (p.domContentLoadedEventEnd - p.domContentLoadedEventStart));
console.log("DOM complete = " + p.domComplete);
console.log("DOM interactive = " + p.interactive);
// document load and unload time
console.log("document load = " + (p.loadEventEnd - p.loadEventStart));
console.log("document unload = " + (p.unloadEventEnd - p.unloadEventStart));
// other properties
console.log("type = " + p.type);
console.log("redirectCount = " + p.redirectCount);
}
}