检查页面是否在 JavaScript 中重新加载或刷新
我想检查何时有人尝试刷新页面。
例如,当我打开页面时没有任何反应,但当我刷新页面时它应该显示警报。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我想检查何时有人尝试刷新页面。
例如,当我打开页面时没有任何反应,但当我刷新页面时它应该显示警报。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(15)
⚠️⚠️⚠️
window.performance.navigation.type
已弃用。请参阅 Илья Зеленько 的回答。了解页面实际重新加载的更好方法是使用大多数现代浏览器支持的导航器对象。
它使用导航计时 API。
来源:导航计时 API
⚠️⚠️⚠️
window.performance.navigation.type
is deprecated. Please see Илья Зеленько's answer.A better way to know that the page is actually reloaded is to use the navigator object that is supported by most modern browsers.
It uses the Navigation Timing API.
Source: Navigation Timing API
2018 年至今的新标准 (PerformanceNavigationTiming)
window.performance.navigation 属性已弃用 /#obsolete" rel="noreferrer">导航计时级别 2 规范。请改用
PerformanceNavigationTiming
界面。PerformanceNavigationTiming.type
这是一个 实验技术。
使用此功能之前,请仔细检查浏览器兼容性表在生产中。
检查页面是否在 JavaScript 中重新加载或刷新
2021 年 11 月 9 日支持
2023 年 7 月 19 日支持
type 只读属性返回表示导航类型的字符串。该值必须是以下值之一:
navigate - 通过单击链接、在浏览器地址栏中输入 URL、表单提交或通过脚本操作(而不是重新加载和初始化)进行初始化来启动导航。 back_forward 如下所列。
重新加载 - 通过浏览器的重新加载操作或
location.reload()
。back_forward - 导航是通过浏览器的历史遍历操作。
预渲染 - 导航由预渲染提示<启动/a>.
该属性是只读的。
以下示例说明了该属性的用法。
New standard 2018-now (PerformanceNavigationTiming)
window.performance.navigation
property is deprecated in the Navigation Timing Level 2 specification. Please use thePerformanceNavigationTiming
interface instead.PerformanceNavigationTiming.type
This is an experimental technology.
Check the Browser compatibility table carefully before using this in production.
Check if page gets reloaded or refreshed in JavaScript
Support on 2021-11-09
Support on 2023-07-19
The type read-only property returns a string representing the type of navigation. The value must be one of the following:
navigate — Navigation started by clicking a link, entering the URL in the browser's address bar, form submission, or initializing through a script operation other than reload and back_forward as listed below.
reload — Navigation is through the browser's reload operation or
location.reload()
.back_forward — Navigation is through the browser's history traversal operation.
prerender — Navigation is initiated by a prerender hint.
This property is Read only.
The following example illustrates this property's usage.
第一步是检查
sessionStorage
对于某些预定义值,如果存在,则提醒用户:第二步是设置
sessionStorage
为某个值(例如true
):会话值保留到页面关闭为止,因此,只有当页面在网站的新选项卡中重新加载时,它才会起作用。您还可以以同样的方式保留重新加载计数。
The first step is to check
sessionStorage
for some pre-defined value and if it exists, alert the user:The second step is to set
sessionStorage
to some value (for exampletrue
):Session values kept until the page is closed, so it will work only if the page reloaded in a new tab with the site. You can also keep a reload count the same way.
当有人第一次访问该页面时存储 cookie。刷新时检查您的 cookie 是否存在,如果存在,则发出警报。
在你的正文标签中:
Store a cookie the first time someone visits the page. On refresh check if your cookie exists and if it does, alert.
And in your body tag:
我编写了此函数来同时使用旧的
window.performance.navigation
和新的performance.getEntriesByType("navigation")
检查两种方法:结果描述:
0:点击链接,在浏览器地址栏输入URL,表单提交,点击书签,通过脚本操作初始化。
1: 单击“重新加载”按钮或使用
Location.reload()
2: 使用浏览器历史记录(后退和前进)。
3: 预渲染活动,例如
4:< /strong>任何其他方法。
I have written this function to check both methods using the old
window.performance.navigation
and the newperformance.getEntriesByType("navigation")
at the same time:Result description:
0: clicking a link, Entering the URL in the browser's address bar, form submission, Clicking bookmark, initializing through a script operation.
1: Clicking the Reload button or using
Location.reload()
2: Working with browser history (Back and Forward).
3: prerendering activity like
<link rel="prerender" href="//example.com/next-page.html">
4: any other method.
如果
返回
0=>用户刚刚输入了一个 URL
1 =>页面已重新加载
2=>单击后退按钮。
If
returns
0 => the user just typed in an URL
1 => the page reloaded
2 => the back button is clicked.
我在 JavaScript 检测页面刷新中找到了一些信息。他的第一个建议是使用隐藏字段,这些字段往往通过页面刷新来存储。
I found some information in JavaScript Detecting Page Refresh. His first recommendation is using hidden fields, which tend to be stored through page refreshes.
这里有一个几乎所有浏览器都支持的方法:
它使用SessionStorage来检查页面是否是第一次打开或者是否刷新。
Here is a method that is supported by nearly all browsers:
It uses SessionStorage to check if the page is opened the first time or if it is refreshed.
尚未提及一种简单的解决方案(不依赖于已弃用的
window.performance.navigation
):使用
window.onbeforeunload
来存储您的时间和 URL当用户离开页面(可能刷新页面)时当前页面(在本地存储中)。然后使用
window.onload
从本地存储中获取这些值。如果最近的 URL 与存储的 URL 匹配,并且存储的时间与当前时间匹配(可能有微小的偏移),则这是用户重新加载的页面。
One easy solution has not been mentioned (not relying on the deprecated
window.performance.navigation
):Use
window.onbeforeunload
to store the time and the URL of your current page (in localstorage) when the user leaves the page (potentially refreshes the page).Then use
window.onload
to get those values from localstorage.If the recent URL matches the stored URL and if the stored time matches the current time (maybe with a tiny offset) then it is a page reload by the user.
这个实现帮助了我:
来自 MDN 参考 2022:导航计时级别 2规格
This implementation helped me:
From MDN reference 2022: Navigation Timing Level 2 specification
在 JavaScript 中(2023):
In JavaScript (2023):
在控制台中附加以下脚本:
Append the below script in the console:
这里当按下 F5 时会停止直接刷新。
Here it stops direct refresh when F5 is pressed.