如何使用jQuery或JavaScript检查页面是否正在重新加载或刷新?

18

我需要在页面刷新或重新加载时执行某种操作,例如当我点击网格上的下一页、筛选或刷新时。我需要在这些事件上显示一些确认框。

是否有任何事件可以使用JavaScript告诉您页面正在进行筛选、刷新或分页操作?

谢谢。

4个回答

21
如果正在刷新页面(或用户正在离开网站/关闭浏览器),window.onunload 将会触发。
// From MDN
window.onunload = unloadPage;
function unloadPage()
{
    alert("unload event detected!");
}

https://developer.mozilla.org/zh-CN/docs/Web/API/WindowEventHandlers/onunload

如果你只是想让用户确认是否留在页面,请使用以下代码:

window.onbeforeunload = function() {
    return "Are you sure you want to navigate away?";
}

1
但这并没有回答问题。问题是要特别检查页面是否正在重新加载并捕获该事件。在这种情况下,如果关闭浏览器,它仍然会触发,纠缠用户在他们关闭浏览器之前确认。这是不好的行为,任何称职的开发人员都知道不要这样做。 - user4593252
1
当然这是不好的行为,但是原帖作者想要检测页面何时被刷新,现在他可以了。他应该这样做吗?那是他的权利。 - AlienWebguy

3
你可以创建一个隐藏字段并在第一次页面加载时设置其值。当页面再次加载时,您可以检查隐藏字段。 如果它为空,则表示该页面是第一次加载,否则为刷新。像这样的东西:

HTML

<body onLoad="CheckPageLoad();">

    <input type="hidden" name="visit" id="visit" value="" />

</body>

JS

function CheckPageLoad() {
    if (document.getElementById("visit").value == "") {
        // This is a fresh page load
        document.getElementById("visit").value = "1";
    }
    else {
        // This is a page refresh
    }
}​

嗯,但是当您刷新时,该值将始终被清空。因此,它永远无法确定该字段先前是否有值。 - Shawn Rebelo
如果页面在视图状态中存储控件的状态,那么这可能还可以。问题是如何处理引起后续请求的更复杂的页面。如果这是一个简单的页面,依赖于用户交互,然后将值放入该字段,则这是一个很好的解决方案。但是,如果页面引起多个后续请求,并且有许多字段供用户填写,则它变得不可扩展。 - user4593252

1
$(function () {
    if (performance.navigation.type == 1) {
        yourFunction();
    }
});

更多关于performance.navigation返回的PerformanceNavigation对象的信息


1
那个已经被弃用了。虽然有替代品,但你并没有真正按照预期使用这些接口。https://developer.mozilla.org/zh-CN/docs/Web/API/PerformanceNavigation - philw

1
有一些关于应对这个问题的澄清说明,我认为这些是至关重要的。
首先,刷新/隐藏字段系统适用于新页面复制开始后以及之后,而不是在离开第一页复制时。
根据我的研究和其他一些方法,由于隐私标准的原因,无法检测到卸载或更早时页面的刷新。只有在加载新页面之后以及之后才能检测到。
我曾经提出过一个类似的问题请求,但基本上是在退出页面时终止会话,并且在查看该问题时发现浏览器将重新加载/刷新视为两个不同的部分:
1.关闭当前窗口(触发onbeforeunload和onunload js事件)。 2.请求页面,就好像您从未拥有它。服务器上的会话当然没有问题,但是页面上最后使用的url没有查询字符串更改/添加值。
这些也按顺序发生。只有自定义或非标准浏览器才会有所不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接