有什么方法可以检测Javascript中的刷新吗?我在互联网上查找一些东西。非常复杂的事情,如会话cookie客户端X/ClientY。除了一个复杂的大混乱之外什么也没发现...然后我想了一些事情,使用 onload,如果页面加载,代码总是被执行。所以它也将在重新加载时执行但是,您希望仅在页面重新加载时执行的代码,而不是在页面加载时执行。当您使用 onunload 时,onunload 中的代码将在关闭窗口、退格键和刷新时执行。
- 加载
- 加载页面
- 刷新
- 其他??
- 卸载
- 关闭浏览器
- 刷新
- 退格
如您所见,当我使用 onload 时,它将加载页面等。并且使用 onunload,它将在关闭浏览器刷新等时执行操作。是否可以仅在触发两个事件(加载和卸载(时才使用刷新执行操作?
PS:我可能完全错了,但我只是有这个想法,它是否/可能有效?
不要依赖onbeforeunload
事件;使用onload
事件并localStorage
/sessionStorage
。
var visited = false;
window.onload = function () {
if (localStorage["visited"] === true) {
visited = true;
}
localStorage["visited"] = true;
/* change `local` to `session` if you want
this behavior to stay for the present session only */
return;
}
这会在HTML5的localStorage
系统中的客户端添加一个标志。这将在页面重新加载/浏览器崩溃/选项卡关闭后保留 - 也重新打开。
代码的基本作用是查看该标志是否已设置。如果设置,则表示用户之前访问过该页面。然后,我们将一个名为 visited
的全局变量设置为 true。您可以在代码中检查此变量,如果为 true,则停止执行脚本。
if (visited === true) {
return false; //return breaks out of your function
}
您可能希望将代码包装在单个 IIFE 中,仅当此变量是假的时才执行。
!visited && (function() {
//your code here
})();
这种方法(或任何方法,就此而言(不是万无一失的。仅将其用于更好的用户体验,而不是防止恶意活动。任何用户都可以轻松清除或编辑localStorage
数据。