Javascript - 检测刷新 - 加载和卸载 - 你能用它们来检测刷新吗?



有什么方法可以检测Javascript中的刷新吗?我在互联网上查找一些东西。非常复杂的事情,如会话cookie客户端X/ClientY。除了一个复杂的大混乱之外什么也没发现...然后我想了一些事情,使用 onload,如果页面加载,代码总是被执行。所以它也将在重新加载时执行但是,您希望仅在页面重新加载时执行的代码,而不是在页面加载时执行。当您使用 onunload 时,onunload 中的代码将在关闭窗口、退格键和刷新时执行。

  1. 加载
    • 加载页面
    • 刷新
    • 其他??
  2. 卸载
    • 关闭浏览器
    • 刷新
    • 退格

如您所见,当我使用 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数据。

最新更新