如何检测浏览器是否正在加载新页面

7

我有一个web应用程序,其中包含一些“安全”代码,如果服务器(Socket.IO)连接超过5秒钟没有响应(通常是由于客户站点防火墙/破损的代理问题),则会导致页面重新加载。

只要开始加载新页面,Socket.IO连接就会停止,但安全代码无法识别这一点。导航到加载缓慢的页面会触发安全代码并将您带回上一页。

在此代码导致重新加载之前,我需要能够确定浏览器当前是否正在等待加载新的(缓慢的)页面。

除了在每个链接上放置jQuery点击事件(无法捕获通过地址栏导航的情况)之外,还有哪些方法可以实现这一点?

谢谢,

Chris.

2个回答

15

通过监控 window.onbeforeunload 即可实现这一点。在用户开始导航离开时立即触发。

在Chrome控制台上尝试在任意页面中输入以下内容并单击任意链接:

window.onbeforeunload = function () { console.log("oh noes"); }

2
我的建议是:修复你的代码,使得当 socket 断开连接时不需要重新加载页面。问题就解决了。
编辑: 我想你可以简单地设置一个变量,比如 isReloading,在页面重新加载时将其设为 true。你还需要监控 onbeforeunload 事件,并检查哪个事件先发生:断开连接还是卸载事件。如果先发生了断开连接,那么你就被断开连接了。触发 isReloading 标志并重新加载页面。在 onbeforeunload 中检查标志是否已设置。反转检查缓慢页面是否正在加载的概念:检查是否正在重新加载。

是的,同意。没有办法进行检查。 - Asken
谢谢,但这是不可讨论的。 - fadedbee

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